回文数,是指正着读、反着读,都相同的数字。如:1221、13531...等等。
任取一个十进制整数,用下面的方法可以求出一个回文数:
把这个数字的各个位,颠倒前后位置,形成一个新数,再和原数相加,得到的和,就可能是一个回文数。
如果不是回文数,就再重复上述的步骤,则最终可得到回文数。
如十进制数是 78,则形成回文数的过程为:
78 + 87 = 165
165 + 561 = 726
726 + 627 = 1353
1353 + 3531 = 4884
上述方法,尚没有得到数学上的理论证明,属于一个猜想。可以编写一个程序来加以验证。
要求在输入一个数字后,显示出来计算的过程。
做而论道编程如下:
#include <stdio.h>
unsigned int f1(unsigned int x)
{
unsigned int y = 0, t;
while(x) {t = x % 10; x /= 10; y *= 10; y += t;}
return y;
}
unsigned int f2(unsigned int x)
{
if (x == f1(x)) return 0;
return 1;
}
void main()
{
unsigned int i;
printf("Input a number: "); scanf("%d", &i);
while(f2(i)) {
printf("%u + %u = ", i, f1(i)); //打印过程
i += f1(i);
printf("%u\n", i); //打印过程
}
printf("HUI WEN SHU = "); printf("%u", i);
printf("\n\n");
}
这个程序执行时,显示如下:
Input a number: 8627
8627 + 7268 = 15895
15895 + 59851 = 75746
75746 + 64757 = 140503
140503 + 305041 = 445544
HUI WEN SHU = 445544
Press any key to continue