一个正整数,假如从左向右读(称之为正序数)和从右向左读(称之为倒序数)是一样的,这样的数就叫回文数。
任取一个正整数,假如不是回文数,将该数与他的倒序数相加,若其和不是回文数,则重复上述步骤,一直到获得回文数为止。
例如:
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
大数加法,用栈。什么类型都不可以的