简单模拟。

CODE:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;

const int maxn = 101;
char s[maxn];
int num[2000], cnt;

int is_hw(int x) //是否是回文数 
{
    int i;
    sprintf(s, "%d", x);
    int l = strlen(s);
    int ok = 1;
    for(i = 0 ; i < l ; i++)
    {
        if(s[i] != s[l-i-1]) 
        {    
            ok = 0;
            break;
        }
    }
    if(ok) return 1;
    return 0;
}

int get_next(int b)    //得到下一个数 
{
    int a, i;
    sprintf(s, "%d", b);
    int l = strlen(s);
    for(i = 0 ; i < l/2 ; i++)
    {
        char t = s[i];
        s[i] = s[l-1-i];
        s[l-1-i] = t;
    }
    sscanf(s, "%d", &a);
    return a+b;
}


int main()
{
    int n;
    while(~scanf("%d", &n))
    {
        int i;
        cnt = 1;
        num[0] = n;
        for(;;)
        {
            num[cnt] = get_next(num[cnt-1]);
            int find = 0;
            for(i = 0 ; i < cnt ; i++)
            {
                 if(is_hw(num[i])) 
                 {
                     find = 1;
                     break;
                 }
            }
            if(find) break;
            cnt++;
        }
        printf("%d\n", cnt-1);
        printf(cnt == 1?"%d\n":"%d", num[0]);
        for(i = 1; i < cnt; i++)
        {
            printf(i!=cnt-1?"--->%d":"--->%d\n", num[i]);
        }//格式输出 
    }
    return 0;

} 

posted on 2012-07-18 10:36  有间博客  阅读(262)  评论(0编辑  收藏  举报