任意一个十进制整数,将其倒序后与原数相加,
得到一个新的整数,重复以上步聚,直至得到一个回文数(首尾对称)。
要求编写2个子函数:一个将整数逆序生成新的整数;另一个判断给定整数是否为回文数。
#include <stdio.h>
void main()
{
int act1();
int act2();
int a,b,c;
printf("input a number\n");
scanf("%d",&a);
c=a;
b = act1(a);//把a的逆序数给b
c+=b;//加起来
do
{
if(act2(c))
break;
else
{
c+=b;
}
}while(act2(c)==0);
printf("the last number is ");
printf("%d\n",c);
}
int act1(int z)//返回逆序数
{
int sum=0;
while (z)
{
sum=sum*10+z%10;
z/=10;
}
return sum;
}
int act2(int x)//是逆序返回1,不是返回0
{
int sum=0;
int y;
int u;
u=x;
while (x)
{
sum=sum*10+x%10;
x/=10;
}
if(sum==u)
y=1;
else y=0;
return y;
}
后来又写了一个,好像稍微简单一点
#include <stdio.h>
int nixu(int a)//逆序
{
int sum=0;
int i;
while(a!=0)
{
i=a%10;
a/=10;
sum=sum*10+i;
}
return sum;
}
int huiwen(int a)//判断是否是回文数
{
if(nixu(a)==a)
return 0;
else
return 1;
}
void main()
{
int a,now;
int sum=0;
scanf("%d",&a);
now=a;
do
{ sum=nixu(a);
now+=sum;
}while(huiwen(now));
printf("%d\n",now);
}