一个正整数,如果从左向右读和从右向左读是一样的,这样的数就叫回文数。
任取一个正整数,如果不是回文数,将该数与他的倒序数相加,若其和不是回文数,则重复上述步骤,一直到获得回文数为止。
小明在某次考试中突然想到一个问题:是不是不论由什么正整数开始,在经过有限次正序数和倒序数相加的步骤后,都会得到一个回文数。
小明是那么执着于他的猜想,以致于没有做完试卷(惨案现场)。 现在,小明决定化悲痛为力量,并将这个猜想命名为小明猜想。
他悄悄地塞给了你几个数,你能帮他计算吗。
Input
每行一个正整数。
特别说明:输入的数据保证中间结果小于2^31。
Output
对应每个输入,输出两行,一行是变换的次数,一行是变换的过程。
保证题中的每个数经过变换后都能变成回文数
Sample Input
27228 37649
Sample Output
3 27228--->109500--->115401--->219912 2 37649--->132322--->355553
#include<iostream>
using namespace std;
int huiwen(long num,long *y)
{
long s=num;
*y=0;
while(s>0)
{
(*y)=(*y)*10+s%10;
s=s/10;
// printf("%d ",*y);
}
if((*y)==num)//回文数
return 1;
else
return 0;
}
int main()
{
long a[102]={0};//数组清零
int ct;
long num;
long y;
while(cin>>num)
{
y=0;
ct=0;
a[ct++]=num;
while(1)//不是回文数
{
if(!huiwen(num,&y))//y为num的倒叙
{
num=y+num;
a[ct++]=num;
//y=0;
}
else {
a[ct++]=num;
break;
}
}
cout<<ct-2<<endl;
int i;
for(i=0;i<(ct-1);i++)
{
if(i!=(ct-2))
cout<<a[i]<<"--->";
else
cout<<a[i]<<endl;
}
}
return 0;
}