回文数猜测

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

例如,对于n=69,有(169+96=1652165+561=7263726+627=135341353+3531=4884(回文数)。
试设计程序,验证某一区间[x1,×2]中的每一个数n是否为回文数,
若不是,请展示n通过以上“顺逆求和”操作转化为回文数的步骤数。
例如n=69时经4次操作得到回文数,输出694)及得到的回文数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;
}


posted @ 2023-08-13 16:06  xuchaoxin1375  阅读(25)  评论(0)    收藏  举报  来源