解题思路:
对于输入,利用字符数组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语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:459 |
WU-printf基础练习2 (C++代码)浏览:2002 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:699 |
C语言训练-自由落体问题 (C语言代码)浏览:611 |
母牛的故事 (C语言代码)浏览:943 |
C二级辅导-计负均正 (C语言代码)浏览:480 |
字符逆序 (C语言代码)浏览:617 |
C语言程序设计教程(第三版)课后习题7.4 (C语言代码)浏览:445 |
C语言程序设计教程(第三版)课后习题8.6 (C语言代码)浏览:585 |
众数问题 (C语言代码)浏览:623 |