10018 Reverse and Add

题目大意:

题目原文:http://uva.onlinejudge.org/external/100/10018.pdf(不知道为什么这个地址打不开了)

题目是说给我们一个数字,将它逆转然后加上原来的数,然后判断其结果是不是回文数(顺着和逆着看一样),如果不是回文数,则重复以上步骤。

计算出一个数要几次操作形成回文数,并输出这个回文数。

直接按题目的意思计算即可。

附上代码:

View Code
 1 #include<stdio.h>
 2 long p10(long a)//返回10^a 
 3 {
 4  long x=1;
 5  while(a--)
 6   x*=10;
 7  return x;
 8 }
 9 
10 int bit(long a)//计算a的位数 
11 {
12  int i=0;
13  while(a)
14  {
15   a/=10;
16   i++;
17  }
18  return i;
19 } 
20 
21 long initial(long a)//返回a的逆转数 
22 {
23  int bi,i;
24  long b=0;
25  bi=bit(a);
26  for(i=1;i<=bi;i++)
27  {
28   b+=a%p10(i)/p10(i-1)*p10(bi-i);
29  }
30  return b;
31 }
32 
33 int main()
34 {
35  long a,n,x;
36  scanf("%ld",&n);
37  while(n--)
38  {
39   scanf("%ld",&a);
40   x=0;
41   while(a!=initial(a)) //判断是否回文数
42   {
43    a+=initial(a);
44    x++;
45   }
46   printf("%ld %ld\n",x,a);
47  }
48  return 0;
49 }
原文地址:https://www.cnblogs.com/syiml/p/2910186.html