思路:起初我准备用字符串写的,因为这样比较容易获得每一位的数字,但马上就否定这种想法,因为想加太麻烦了。
后来分析了下,回文数反过来的数也是相同的,可以直接从个位到高位再求一次余,然后再求和。
代码:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int sum(int num)
{
int n=0;
while(num)//求这个数反过来后的数
{
n=n*10+num%10;
num/=10;
}
return n;
}
int main()
{
int cnt,n[1000];
while(~scanf("%d",&n[0]))
{
cnt=0;
int temp=sum(n[0]);
while(n[cnt]!=temp)//判断是否已经是回文数了
{
cnt++;
n[cnt]=n[cnt-1]+temp;
temp=sum(n[cnt]);
}
printf("%d\n",cnt);
printf("%d",n[0]);
for(int i=1;i<=cnt;i++){
printf("--->%d",n[i]);
}
printf("\n");
}
return 0;
}