问题D:回文数猜测-分支循环小综合
题目描述
所谓回文数,即顺序与逆序均为相同的整数。如292、10301均为回文数。
“顺逆求和”操作就是把一个数与其逆序数相加。
有人猜测:任意一个十进制整数n(n不为回文数),经有限次“顺逆求和’操作可得到一个回文数。

例如,对于n=69,有(1)69+96=165(2)165+561=726(3)726+627=1353
(4)1353+3531=4884(回文数)。
试设计程序,验证某一区间[x1,×2]中的每一个数n是否为回文数,
若不是,请展示n通过以上“顺逆求和”操作转化为回文数的步骤数。
例如n=69时经4次操作得到回文数,输出69(4)及得到的回文数4884。
如果超过100步还未能转化为回文数,则终止操作,输出n(?),表明该数可能不满足猜测。
输入
输入两个整数(第一个小于第二个)。
输出
输出回文数的步骤数及相应的回文数。
输入
86 90
输出
86(3):1111
87(4):4884
88(0):88
89(?):
90(1):99
*/
#include <stdio.h>
int palindrome(int n);
int main(){
int x1,x2;
int flag ;
scanf("%d%d",&x1,&x2);
for(int i = x1;i <= x2;i ++ ){
if(i == palindrome(i)){
printf("%d(0):%d\n",i,i);
}

else
{
//for(int t = i,j = 1;j <= 100;j ++){
//j为进行逆序求和的次数.
flag = 0;
int t = i;
for(int j = 1;j <= 100;j ++){
//int t = i;位置犯错
t += palindrome(t);
if(t == palindrome(t)){
printf("%d(%d):%d\n",i,j,t);
flag = 1;
break;
}
}
if(flag == 0)
{
printf("%d(?)\n",i);
}

}
}

return 0;
}
//调试的时后注意函数是否错误;
int palindrome(int n){
int ret = 0;//这里不要重复定义n
while (n > 0)
{
ret = n % 10 + ret * 10;
n /= 10;
}

return ret;
}