简单模拟。
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;
#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;
}