解题思路:
对于输入,利用字符数组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语言程序设计教程(第三版)课后习题6.11 (C语言代码)浏览:477 |
C语言程序设计教程(第三版)课后习题11.3 (C语言代码)浏览:1051 |
2005年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:498 |
C语言程序设计教程(第三版)课后习题10.1 (Java代码)浏览:1447 |
A+B for Input-Output Practice (VI) (C++代码)浏览:418 |
字符串问题 (C语言代码)浏览:1529 |
简单的a+b (C语言代码)浏览:826 |
1113题解浏览:791 |
1011题解浏览:768 |
Hello, world! (C语言代码)浏览:718 |