HDU 1282 回文数猜想

解题报告:

有一种猜想,即任意的一个数,将它和它的倒序数相加,经过若干次操作之后,一定能得到一个回文数,倒序数是指把这个数倒过来表示的数字,如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\n%d",f,jilu[0]);
33         for(int i = 1;i<=f;++i)
34         printf("--->%d",jilu[i]);
35         printf("\n");
36     }
37     return 0;
38 }
View Code

 

posted @ 2013-07-18 15:18  xiaxiaosheng  阅读(191)  评论(0编辑  收藏  举报