2025年非利克瑞尔数

非利克瑞尔数问题描述 利克瑞尔数 Lychrel Number 指的是将该数各数位逆序翻转后形成的新数相加 并将该过程反复迭代后 结果永远无法是一个回文数的自然数 57 就是一个非利克瑞尔数 57 75 132 132 231 363 363 是一个回文数 请编写程序

大家好,我是讯享网,很高兴认识大家。

【问题描述】

利克瑞尔数(Lychrel Number)指的是将该数各数位逆序翻转后形成的新数相加,并将该过程反复迭代后,结果永远无法是一个回文数的自然数。57就是一个非利克瑞尔数:57+75=132, 132+231=363,363是一个回文数。请编写程序,输入一个自然数(非利克瑞尔数),请计算其最终的回文数是多少及每次迭代过程。

注意:假设输入的整数和中间产生的整数都不超过int数据类型的表示范围。

【输入形式】

从标准输入读入一个正整数。

【输出形式】

在标准输出上输出迭代过程和最终的回文数。分行输出每次迭代过程:先输出迭代次数(从1开始计数),后跟英文冒号:,然后是两数相加等于某数的等式,其中的符号都是英文符号,没有空格。在最后一行输出最终得到的回文数。

若输入的整数本身就是回文数,则不输出任何迭代过程,直接输出该回文数。

【样例1输入】

109

【样例1输出】

1:109+901=1010


讯享网

2:1010+101=1111

1111

【样例1说明】

输入的非利克瑞尔数为109,经过两次迭代可得到回文数:第一次迭代为109和其逆序数901相加得1010,第二次迭代为上次迭代得到的1010加上其逆序数101(注意:高位的0省略)得1111,1111就是最终得到的回文数。

【样例2输入】

909

【样例2输出】

909

【样例2说明】

输入的非利克瑞尔数为909,其本身为回文数,直接输出,没有迭代过程。

C++代码如下(菜鸟一枚,大佬勿喷):

#include<iostream>
using namespace std;
bool check(int x)//此函数是判断是否是回文数
{
    int sum1=0;
    int x1=x;//此表达式意义是将一个变量的值赋给另一个变量,前提是必须保证该变量有具体的值
    while(x1>0)
    {
        sum1=sum1*10+x1%10;
        x1/=10;
    }
    if(sum1==x) return true;
    else return false;
}
int output(int y)//此函数是返回一个数的逆序数
{
     int sum2=0;
    while(y>0)
    {
        sum2=sum2*10+y%10;
       y/=10;
    }
    return sum2;
}
//以下是主函数部分
int main()
{
    int n,i;//i变量记录迭代次数
    cin>>n;
    if(check(n))
    {
        cout<<n;
    }//先判断最简单的情况,一开始输入的就是一个回文数,直接输出即可
    else
    {
        for(i=1;;i++)
        {
            printf("%d:%d+%d=%d\n",i,n,output(n),n+output(n));
            if(check(n+output(n)))//循环退出条件,一定要有,这个就是判断第一次迭代之后相加的数
            break;
            else
            {
                n=n+output(n);//更新n的值以便进入下一次循环
            }
        }
        cout<<n+output(n);
    }
    return 0;
}

小讯
上一篇 2025-03-10 14:42
下一篇 2025-02-19 08:58

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/54606.html