C趣味編程百例(27)回文數(shù)的形成

字號:

85.回文數(shù)的形成
     任取一個十進(jìn)制整數(shù),將其倒過來后與原來的整數(shù)相加,得到一個新的整數(shù)后重復(fù)以上步聚,則最終可得到一個回文數(shù)。請編程驗證。
    *問題分析與算法設(shè)計
     回文數(shù)的這一形成規(guī)則目前還屬于一個猜想,尚未得到數(shù)學(xué)上的證明。有些回文數(shù)要經(jīng)歷上百個步聚才能獲得。這里通過編程驗證。
     題目中給出的處理過程很清楚,算法不需要特殊設(shè)計??砂凑疹}目的敘述直接進(jìn)行驗證。
    *程序與程序注釋
    #include
    #define MAX 2147483647
    long re(long int);
    int nonres(long int s);
    void main()
    {
     long int n,m;
     int count=0;
     printf("Please enetr a number optionaly:");
     scanf("%ld",&n);
     printf("The generation process of palindrome:\n");
     while(!nonres((m=re(n))+n)) /*判斷整數(shù)與其反序數(shù)相加后是否為回文數(shù)*/
     {
     if(m+n>=MAX)
     {
     printf(" input error,break.\n");
     break;
     }
     else
     {
     printf("[%d]:%ld+%ld=%ld\n",++count,n,m,m+n);
     n+=m;
     }
     }
     printf("[%d]:%ld+%ld=%ld\n",++count,n,m,m+n); /*輸出最后得到的回文數(shù)*/
     printf("Here we reached the aim at last!\n");
    }
    long re(long int a) /*求輸入整數(shù)的反序數(shù)*/
    {
     long int t;
     for(t=0;a>0;a/=10) /*將整數(shù)反序*/
     t=t*10+a%10;
     return t;
    }
    int nonres(long int s) /*判斷給定的整數(shù)是否是回文數(shù)*/
    {
     if(re(s)==s) return 1; /*若是回文數(shù)則返回1*/
     else return 0; /*否則返回 0*/
    }