给定一个正整数,把它的各位数字上数字倒过来排列组成一个新数,然后与原数相加,如果是回文数则停止

问题描述:

给定一个正整数,把它的各位数字上数字倒过来排列组成一个新数,然后与原数相加,如果是回文数则停止
如果不是,则重复这个操作,直到和为回文数为止.
例如:87则有:
STEP1:87+78=165
STEP2:165+561=726
STEP3:726+627=1353
STEP4:1353+3531=4884
编写一个程序,输入一个数M(1

87
STEP1:87+78=165
STEP2:165+561=726
STEP3:726+627=1353
STEP4:1353+3531=4884
4 4884
Press any key to continue
#include
#include
#include
main()
{
int i,len,flag,cnt=1,num,numrev,addnum;
char str[20]={0},strRev[20]={0},hui[20]={0};
gets(str);
num=atoi(str);
strcpy(strRev,strrev(str));

numrev=atoi(strRev);
while (1)
{
addnum = num+numrev;
printf("STEP%d:%d+%d=%d\n",cnt,num,numrev,addnum);
itoa(addnum,hui,10);
len=strlen(hui);
flag=0;
for (i=0;i=30)
{
printf("0\n");
break;
}
num =addnum;
strcpy(strRev,strrev(itoa(num,str,10)));
numrev=atoi(strRev);
}
}有些地方不是很理解 ,可以给每一步加个注释吗?#include #include #include main(){ int i,len,flag,cnt=1,num,numrev,addnum; char str[20]={0},strRev[20]={0},hui[20]={0}; gets(str); //输入数字 以字符串方式接收 num=atoi(str);//转为数字 strcpy(strRev,strrev(str));//将接收的字符串逆序numrev=atoi(strRev);//转换成逆序的数字 while (1) { addnum = num+numrev; //两个数字相加printf("STEP%d:%d+%d=%d\n",cnt,num,numrev,addnum); //输出itoa(addnum,hui,10); //将相加后的数字 转为字符串len=strlen(hui); //求长度flag=0;//标识是否是回文for (i=0;i=30)//判断是否大于等于30次{ printf("0\n"); break;}num =addnum;//将和 作为下次运算的第一个数字strcpy(strRev,strrev(itoa(num,str,10)));//根据第一个数逆序出第二个数numrev=atoi(strRev); //字符串转数字 }}