C++验证对于任意正整数,经过有限次变换后,一定能得出一共回文数

任意一个正整数,如果其不是回文数,将该数交换高低位以后和原数相加得到一个新的数,如果新数是回文数, 重复这个变换,直到得到个回文数为止。例如,57变换后得到132(57+75),132得到363(132 + 231),363 是一个回文数。

曾经有数学家猜想:对于任意正整数,经过有限次上述变换以后,一定能得出一个回文数。至今这个猜想还没有被证明是对的。现在请你通过程序来验证。

输入格式

输入一行一个正整数n。

输出格式

输出第一行一个正整数,表示得到一个回文数的最少变换次数。
接下来一行,输出变换过程,相邻的数之间用“–>”连接。输出格式可以参见样例。
保证最后生成的数在int范围内
样例输入:
349
样例输出:
3
349–>1292–>4213–>7337

#include <iostream>
#include <cmath>
using namespace std;
int a[1005];//计产生的新数
int sfshw(int x)//判断是否为回文数
{
    int c=0,i=0,y=0,m=x;
    int b[1005];
    while(x>0)
    {
        b[i]=x%10;
        x/=10;
        c++;
        i++;
    }
    for(i=0;i<c;i++)
    {
        y+=b[i]*pow(10,c-i-1);
    }
    if(m==y)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}
int bhh(int x)//求变换后的数
{
    int c=0,i=0,y=0;
    int b[1005];
    while(x>0)
    {
        b[i]=x%10;
        x/=10;
        c++;
        i++;
    }
    for(i=0;i<c;i++)
    {
        y+=b[i]*pow(10,c-i-1);
    }
    return y;
}
int main()
{
    int n,w=0,i=0;//w是变换次数
    cin>>n;
    if(sfshw(n))//如果输入的数是回文数,直接输出
    {
        cout<<w<<endl<<n<<endl;
    }
    a[0]=n;
    while(!sfshw(n))//如果输入的数不是回文数的情况
    {
        n+=bhh(n);//加上变换后的数得到一个新的数
        w++;
        a[++i]=n;
    }
    cout<<w<<endl;
    for(i=0;i<=w;i++)
    {
        if(i!=w)
            {cout<<a[i]<<"-->";}
        else
        {
            cout<<a[i]<<endl;
        }
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值