一、题目
013:由正整数产生回文数。回文数就是正、反读都相同的数,如:484;4884等等。(根据回文数的计算方法,当进行30次加法后仍得不出回文数,则判定为overflow)(书例3.40)
二、代码实现
思路:由正整数产生回文数,如果它不是回文数,可以将它本身和它的逆序数相加,再次判断,如果还不是则继续上述方法。如123和它的逆序数321相加得到444,即回文数。
代码如下:
//013:由正整数产生回文数。回文数就是正、反读都相同的数,如:484;4884等等。
//根据回文数的计算方法,当进行30次加法后仍得不出回文数,则判定为overflow
#include<stdio.h>
int main()
{
int original,reverse,org;//original原始数、reverse翻转后的数
int m,n,t;
char ch;
do{
printf("请输入正整数:\n");
scanf("%d",&n);
t=0;//t计数,回文数计算次数
m=n;//m记录输入的正整数
do{
original=n;
reverse=0;
org=n;
do{
reverse=reverse*10+org%10;
org=org/10;
}while(org!=0);//reverse变为original的逆序数
n=original+reverse;//n由两者相加
t++;//记录加法次数
}while(reverse!=original&&t<=30);//当reverse和original相同时则回文数已生成完毕,或者相加30次还未得到回文数,此时退出循环
if(reverse==original)
{printf("由正整数%d产生的回文数是%d\n",m,original);}//输出得到的回文数
else{printf("overflow!\n");}
printf("\ncontinue? y/n\n");
scanf(" %c",&ch);
}while(ch!='N'&&ch!='n');
printf("END\n");
return 0;
}
运行结果:
请输入正整数:
275
由正整数275产生的回文数是44044
continue? y/n
y
请输入正整数:
196
overflow!
continue? y/n
y
请输入正整数:
35687
由正整数35687产生的回文数是157751
continue? y/n
N
END
按任意键关闭终端。