解题思路:
对于输入,利用字符数组A进行存储N进制的数,如果该N进制数本身就是一个回文数,那么步骤为0,循环结束;
循环结束的出口为得到一个回文数的结果,或者步骤已经超过30步
函数: f:将A翻转存储在B中
huiwen:判断一个数组是否是回文数
add:将两个字符数组相加,结果存储在A中
reset:将数组A把变成符合N进制的形式
注意事项:
参考代码:
#include<stdio.h> #include<string.h> void f(char A[],char B[]){ int i,j; for(i=strlen(A)-1,j=0;i>=0;i--,j++) B[j]=A[i]; } int huiwen(char A[]){ int i,j; for(i=strlen(A)-1,j=0;i>=j;i--,j++) { if(A[i]!=A[j]) return 0; } return 1; } void add(char A[],char B[]){ int i; for(i=0;i<strlen(A);i++) A[i]=(A[i]-'0'+B[i]-'0')+'0'; } void reset(char A[],int N){ int i; for(i=strlen(A)-1;i>=1;i--) { if((A[i]-'0')>=N) { A[i-1]=(A[i-1]-'0')+(A[i]-'0')/N+'0'; A[i]='0'+(A[i]-'0')%N; } } if((A[0]-'0')>=N) { int temp=(A[0]-'0')/N; for(i=strlen(A)-1;i>=1;i--) A[i+1]=A[i]; A[1]='0'+(A[0]-'0')%N; A[0]='0'+temp; } } int main(){ char A[100],B[100]; int N; scanf("%d",&N); getchar(); scanf("%s",A); int flag=1; int count=0; while(1){ if(huiwen(A)||count>30){ break; } else{ count++; f(A,B); add(A,B); reset(A,N); } } if(count>30) printf("Impossible!\n"); else printf("STEP=%d\n",count); }
0.0分
0 人评分
【绝对值排序】 (C语言代码)浏览:484 |
C二级辅导-统计字符 (C语言代码)浏览:753 |
K-进制数 (C++代码)浏览:875 |
A+B for Input-Output Practice (III) (C语言代码)浏览:577 |
C语言训练-大、小写问题 (C语言代码)浏览:617 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:488 |
本人酷爱递归实现很多问题,这里也是浏览:565 |
C语言程序设计教程(第三版)课后习题8.6 (C语言代码)浏览:573 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:409 |
杨辉三角 (C语言代码)浏览:485 |