题目描述
一个正整数,如果从左向右读(称之为正序数)和从右向左读(称之为倒序数)是一样的,这样的数就叫回文数。任取一个正整数,如果不是回文数,将该数与他的倒序数相加,若其和不是回文数,则重复上述步骤,一直到获得回文数为止。例如:68变成154(68+86),再变成605(154+451),最后变成1111(605+506),而1111是回文数。于是有数学家提出一个猜想:不论开始是什么正整数,在经过有限次正序数和倒序数相加的步骤后,都会得到一个回文数。至今为止还不知道这个猜想是对还是错。
代码如下:
#include <stdio.h>
#include <stdlib.h>
int count = 0;
int dxs(int n)//求倒序数
{
int a=0;
while(n)
{
a=10*a+n%10;
n/=10;
}
return a;
}
void hws(int n)//输出回文数
{
int r;
printf("%d ",n);
r=dxs(n);
if(n==r)
return;
else
{
count++;
hws(n+r);
}
}
int main()
{
int n;
scanf("%d",&n);
hws(n);
printf("\ncount=%d\n",count);
system("pause");
exit(0);
}
运行结果:
参考:
https://blog.csdn.net/qq_51690274/article/details/111322261
非递归求解
#include <stdio.h>
int invert(int x,int *invertx)
{
int s=x,sum=0;
while(s)
{
sum*=10;
sum+=s%10;
s/=10;
}
*invertx=sum;
if(x==*invertx)
return 1;
else
return 0;
}
int main()
{
int x,a,*pa=&a,count=0;
scanf("%d",&x);
while(!invert(x,pa))
{
printf("%d ",x);
x+=*pa;
count++;
}
printf("%d\ncount=%d\n",x,count);
return 0;
}