练习题:回文数

本文探讨了数学中关于回文数的一个有趣猜想,即任意正整数通过特定变换最终会成为回文数。介绍了回文数的概念,及其实现算法,通过程序验证了这一猜想,并提供了代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:
一个正整数,如果交换高低位以后和原数相等,那么称这个数为回文数。比如 121,2332 都是回文数,13,456713,4567 不是回文数。
任意一个正整数,如果其不是回文数,将该数交换高低位以后和原数相加得到一个新的数,如果新数不是回文数,重复这个变换,直到得到一个回文数为止。例如,57 变换后得到 132(57+75),132 得到 363(132+231),363是一个回文数。
曾经有数学家猜想:对于任意正整数,经过有限次上述变换以后,一定能得出一个回文数。至今这个猜想还没有被证明是对的。现在请你通过程序来验证。
输入格式
输入一行一个正整数n。
输出格式
输出第一行一个正整数,表示得到一个回文数的最少变换次数。
接下来一行,输出变换过程,相邻的数之间用"—>"连接。输出格式可以参见样例。
保证最后生成的数在 int 范围内。
样例输入
349
样例输出
3
349—>1292—>4213—>733

代码如下:

#include<bits/stdc++.h>
using namespace std;
int a[15];
int b[1000];
int is_huiwen(int n)
{
    int k = 0,sum = 0,digit,len = 0,m = n;
    memset(a,0,sizeof(a));
    while(n > 0){
        a[k++] = n % 10;
        n /= 10;
    }
    for(int i = k - 1;i >= 0;i--){
        digit = 1;
        for(int j = 0;j < len;j++) digit *= 10;
        len++;
        sum += a[i] * digit;
    }
    if(sum == m) return 0;
    else return sum;
}
int main()
{
    int n,num = 1;
    cin >> n;
    b[0] = n;
    while(1){
        if(!is_huiwen(n)) break;
        else b[num] = is_huiwen(n) + n;
        n = b[num++];
    }
    cout << num - 1 << endl;
    for(int i = 0;i < num;i++){
    	if(i) cout << "--->" << b[i];
    	else cout << b[i];
	}
	cout << endl;
    return 0;
}

刚输入一个值先判断是否位回文数,如果不是就将那个倒过来的数加上其本身,再次判断,直到是回文数退出循环,在这期间每一个新数都要用数组保存。(直接看代码吧!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值