一个正整数,假如从左向右读(称之为正序数)和从右向左读(称之为倒序数)是一样的,这样的数就叫回文数。
任取一个正整数,假如不是回文数,将该数与他的倒序数相加,若其和不是回文数,则重复上述步骤,一直到获得回文数为止。
例如:
68变成154(68+86),再变成605(154+451),最后变成1111(605+506),而1111是回文数。
于是有数学家提出一个猜想:
不论开始是什么正整数,在经过有限次正序数和倒序数相加的步骤后,都会得到一个回文数。至今为止还不知道这个猜想是对还是错。
现在请你编程序验证之。
Input
每行一个正整数。
Output
对应每个输入,输出一行为变换的过程。
Sample Input
27228
37649
Sample Output
27228–>109500–>115401–>219912
37649–>132322–>355553
Hint
1.输入的数据保证小于2^60
2.每组数据保证最多运算100次
友情提示:WA的同学请仔细阅读提示1和提示2
任取一个正整数,假如不是回文数,将该数与他的倒序数相加,若其和不是回文数,则重复上述步骤,一直到获得回文数为止。
例如:
68变成154(68+86),再变成605(154+451),最后变成1111(605+506),而1111是回文数。
于是有数学家提出一个猜想:
不论开始是什么正整数,在经过有限次正序数和倒序数相加的步骤后,都会得到一个回文数。至今为止还不知道这个猜想是对还是错。
现在请你编程序验证之。
Input
每行一个正整数。
Output
对应每个输入,输出一行为变换的过程。
Sample Input
27228
37649
Sample Output
27228–>109500–>115401–>219912
37649–>132322–>355553
Hint
1.输入的数据保证小于2^60
2.每组数据保证最多运算100次
友情提示:WA的同学请仔细阅读提示1和提示2
#include<stdio.h> long long sum(long long a){ int t,i=0; long long a1=0; int c[25]={0}; while(a){ c[i]=a%10; a/=10; i++; } t=i; for(i=0;i<t;i++) a1=a1*10+c[i]; return a1; } int main(){ long long a; long long s[100]={0}; int ta,i; while(scanf("%I64d",&a)!=EOF) { ta=0; s[ta]=a; while(a!=sum(a)) { a+=sum(a); s[++ta]=a; } for(i=0;i<ta;i++) printf("%I64d-->",s[i]); printf("%l64d\n",s[ta]); } return 0; }
这是本人的代码,ac不了,请高手指点
解决方案
5
你用的什么环境,在vc6.0中是不支持long long类型的
15
大数加法,用栈。什么类型都不可以的