参考代码:
//要满足2~16之间的任意进制,假设用 A B C D E F,分别表示 10 11 12 13 14 15 #include <stdio.h> char* copystr(char aim[],char b[]); //把字符串b 拷贝到数组 aim[] 中 char* zh_to_char(long x,int jinzhi,char y[]); //把十进制长整数按照需要的进制,转换成 字符串 int huiwenshu(char x[]); //判断字符串是否是回文数 long zh_to_d(char x[],int jinzhi); //把字符串 按照需要的进制,转换成长整数 int len(char x[]); //字符串的长度 char* fanxu(char x[]); //将字符串反序保存 int main(void){ int jinzhi; char x[50]; char y[50]; int i = 0; //表示计算的步数 scanf("%d",&jinzhi); fflush(stdin); //清空缓存 scanf("%s",x); long tmp; for(i = 0;i<=30;i++){ if(huiwenshu(x)) break; //如果输入的数本身就是回文数,步数为0,直接跳出 else{ copystr(y,x); fanxu(x); tmp = zh_to_d(x,jinzhi) + zh_to_d(y,jinzhi); zh_to_char(tmp,jinzhi,x); } } if(i>30) printf("Impossible!\n"); else printf("STEP=%d\n",i); return 0; } char* copystr(char aim[],char b[]){ int i = 0; while(b[i] != '\0'){ aim[i] = b[i]; i++; } aim[i] = '\0'; return aim; } char* fanxu(char x[]){ int n = len(x); char a[n]; int i; i = 0; while(x[i] != '\0'){ a[i] = x[n-2-i]; i++; } a[i] = '\0'; for(i = 0;i<n;i++){ x[i] = a[i]; } return x; } int len(char x[]){ int n = 0; while(x[n]!= '\0'){ n++; } return n+1; } long zh_to_d(char x[],int jinzhi){ long res = 0; int i = 0; while(x[i]!='\0'){ switch(x[i]){ case 'A': res = res*jinzhi+10; break; case 'B': res = res*jinzhi+11; break; case 'C': res = res*jinzhi+12; break; case 'D': res = res*jinzhi+13; break; case 'E': res = res*jinzhi+14; break; case 'F': res = res*jinzhi+15; break; default: res = res*jinzhi+x[i]-'0'; break; } i++; } return res; } int huiwenshu(char x[]){ int i; int n = len(x); char y[n]; copystr(y,x); fanxu(x); for(i = 0;i<n;i++){ if(x[i] != y[i]) break; } if(i <n) return 0; else return 1; } char* zh_to_char(long x,int jinzhi,char y[]){ int i; long tmp = x; for(i = 0;i<100;i++){ tmp = x%jinzhi; switch(tmp){ case 10: y[i] = 'A'; break; case 11: y[i] = 'B'; break; case 12: y[i] = 'C'; break; case 13: y[i] = 'D'; break; case 14: y[i] = 'E'; break; case 15: y[i] = 'F'; break; default: y[i] = tmp + '0'; break; } x = x/jinzhi; if(x == 0) { i++; y[i] = '\0'; break; } } fanxu(y); return y; }
0.0分
0 人评分
WU-格式化数据输出 (C语言代码)浏览:1818 |
C语言考试练习题_保留字母 (C语言代码)浏览:743 |
水仙花 (C语言代码)浏览:1163 |
C二级辅导-阶乘数列 (C语言代码)浏览:583 |
蛇行矩阵 (C语言代码)浏览:559 |
C语言程序设计教程(第三版)课后习题8.5 (C语言代码)浏览:710 |
C语言程序设计教程(第三版)课后习题8.6 (C语言代码)浏览:595 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:527 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:680 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:550 |