练习题:回文数

题目:
一个正整数,如果交换高低位以后和原数相等,那么称这个数为回文数。比如 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;
}

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

猜你喜欢

转载自blog.csdn.net/qq_41998938/article/details/87182283
今日推荐