解题思路:
对于输入,利用字符数组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语言代码)浏览:680 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:696 |
C语言程序设计教程(第三版)课后习题7.1 (C语言代码)浏览:753 |
字符串比较 (C语言代码)答案错误????浏览:615 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:556 |
杨辉三角 (C语言代码)浏览:692 |
C语言训练-排序问题<1> (C语言代码)浏览:356 |
WU-C语言程序设计教程(第三版)课后习题12.3 (C++代码)浏览:871 |
C语言程序设计教程(第三版)课后习题1.6 (C语言代码)浏览:748 |
剔除相关数 (C语言代码)浏览:1102 |