解题报告:
有一种猜想,即任意的一个数,将它和它的倒序数相加,经过若干次操作之后,一定能得到一个回文数,倒序数是指把这个数倒过来表示的数字,如123的倒序数就是321,现在要你判断给定的一个n 要经过多少次操作才能得到一个回文数,并且输出操作的过程,即输出每次相加后得到的结果,所以只要写两个函数,一个是用来判断这个数是否是回文数,另一个是用来判断这个数的倒序数,就OK了。
1 #include<cstdio> 2 bool judge(int k) { //判断是不是回文数 3 int i = 0,x[10005]; 4 while(k) { //将数先存到数组里面 5 x[i++] = k%10; 6 k/=10; 7 } 8 for(int j = 0;j<i;++j) 9 if(x[j] != x[i-j-1]) 10 return false; 11 return true; 12 } 13 int oper(int k) { //求数k的倒序数 14 int ans = 0; 15 while(k) { 16 ans *= 10; 17 ans += (k%10); 18 k /= 10; 19 } 20 return ans; 21 } 22 int main() { 23 int n,jilu[1005]; 24 while(scanf("%d",&n)!=EOF) { 25 jilu[0] = n; //将原来的数先存起来 26 int f = 0; //计数器 27 while(!judge(n)) { 28 n += oper(n); 29 jilu[f+1] = n; 30 f++; 31 } 32 printf("%d %d",f,jilu[0]); 33 for(int i = 1;i<=f;++i) 34 printf("--->%d",jilu[i]); 35 printf(" "); 36 } 37 return 0; 38 }