NYOJ 930 回文数猜想

回文数猜想

时间限制: 2000 ms  |  内存限制: 65535 KB
难度: 2
描述
一个正整数,如果从左向右读(称之为正序数)和从右向左读(称之为倒序数)是一样的,这样的数就叫回文数。任取一个正整数,如果不是回文数,将该数与他的倒序数相加,若其和不是回文数,则重复上述步骤,一直到获得回文数为止。例如:68变成154(68+86),再变成605(154+451),最后变成1111(605+506),而1111是回文数。于是有数学家提出一个猜想:不论开始是什么正整数,在经过有限次正序数和倒序数相加的步骤后,都会得到一个回文数。至今为止还不知道这个猜想是对还是错。现在请你编程序验证之。
输入
多组数据。
输入一个正整数n<10^18
输出
输出2行
第一行输出 步骤数
第二行输出 步骤路径
样例输入
27228
37649
样例输出
3
27228--->109500--->115401--->219912
2
37649--->132322--->355553
提示

保证中间数据不超过 10^18

算法分析:

本题水题一个,关键在于NYOJ要求用long long,不多说了,我被小坑了一下,代码如下

#include<stdio.h>
long long change(long long n)
{
    int a[20];
    int k=0,i;
    long long res;
    while(n!=0)
    {
        k++;
        a[k]=n%10;
        n/=10;
    }    
    res=0;
    for(i=1;i<=k;i++)
    {
        res*=10;
        res+=a[i];
    }
    return res;    
} 
int main()
{
    int i,cnt;
    long long n,result[100];
    while(scanf("%lld",&n)!=EOF)
    {
        cnt=0;
        result[0]=n;
        while(n!=change(n))
        {
            n=n+change(n);
            result[++cnt]=n;
        }    
        printf("%d\n",cnt);
        for(i=0;i<cnt;i++)
			printf("%lld--->",result[i]);
        printf("%lld\n",result[cnt]);
    }    
    return 0;
}        

你可能感兴趣的:(long,long,回文,水题,nyoj,930,回文数猜想)