一个正整数,如果从左向右读(称之为正序数)和从右向左读(称之为倒序数)是一样的,这样的数就叫回文数。任取一个正整数,如果不是回文数,将该数与他的倒序数相加,若其和不是回文数,则重复上述步骤,一直到获得回文数为止。例如:68变成154(68+86),再变成605(154+451),最后变成1111(605+506),而1111是回文数。于是有数学家提出一个猜想:不论开始是什么正整数,在经过有限次正序数和倒序数相加的步骤后,都会得到一个回文数。至今为止还不知道这个猜想是对还是错。现在请你编程序验证之。
输入
每行一个正整数。 特别说明:输入的数据保证中间结果小于2^31。
输出
对应每个输入,输出两行,一行是变换的次数,一行是变换的过程。
样例输入
27228
37649
样例输出
3
27228>109500>115401>219912
2
37649>132322>355553
将每次计算结果存储到数组,独立一个函数进行变换
#include <stdio.h>
int hw(int n)
{
int s=0;
while(n>0)
{
s = s*10+n%10;
n/=10;
}
return s;
}
int main()
{
int a[10000];
int num=0;
int n,p,i;
scanf("%d",&n);
p = n;
int s = hw(n);
while(s!= n)
{
a[num++] = n;
n = s+n;
s = hw(n);
}
printf("%d\n",num);
for(i=0;i<num;i++)
printf("%d>",a[i]);
printf("%d",n);
return 0;
}
/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
/*
输入一个五位数,程序可以判断该数是否是回文数。(所谓回文数,是指从左往右读和从右往左读的结果是一样的,
如:12321、45354、22222……均是回文数,而12345、43415……则不是回文数)
*/
int a;
int b1,b2,b3,b4,b5;
printf("请输入5位的整数:");
scanf("%d",&a);
b1=a/10000;
b2=a/1000%10;
b3=a/100%10;
b4=a/10%10;
b5=a%10;
//12321
if(b1==b5 && b2==b4){
printf("%d是回文\n",a);
}else{
printf("%d不是回文\n",a);
}
}