2.7.1.1 练习1 回文数的猜想
1输入一个数
2一个数,加上是这个数的倒序数,得出结果
3判断是否为回文数,是就退出,否则返回第2步骤
回文数:1336331、9559
典型:输入1735
1753+3571=5324
5324+4235=9559
9559就是一个回文数
程序解答过程:
1设计出各函数功能,便于调用
2编码,解答
各函数功能:
输入数据:int input(void)
对数据取逆序:int reverse(int data)
判断回文数:int ispalin(int data)
溢出判断:int isover(int data
//palin.c
#include<stdi o.h>
int input(void)
{
int data=-1;//防止赋值失败?
for(;;)
{
scanf("%d",&data);
if(data>=10)//使得输入的数字不小于10
break;
scanf("%*[^\n]");//取得除了换行\n之外的所有字符,抛掉
scanf("%*c");//抛掉换行\n
}
return data;
}
int reverse(int data)
{
int res=0;
for(;data>0;data=data/10)//取得data的的逆序
res=res*10+data%10;//data%10取得data最后一位数字
return res;
}
int ispalin(int data)
{
return data==reverse(data);
}
int isover(int data)
{
return data<=0||reverse(data)<=0;//当data大小越界,即超过2^31-1,变成负数
}
int main()
{
int data=input();
int i;
for(i=0;!isover(data);data+=reverse(data))
{
if(!ispalin(data))
printf("[%d]:%d+%d=%d\n",++i,data,reverse(data),data+reverse(data));
else
{
printf("Palin:%d\n",data);
return 0;
}
}
printf("Can not find Palin!\n");
return 0;
}
知识:unsigned int:2^32-1
int : 2^31-1
超过了最大值会越界,越界的数会变成负数
知识盲点:
1)scanf(“%*c[^\n]”);
2)scanf(“%*c”);
%*c :读取出来,再扔掉,即是把缓冲区清除掉,c是格式控制符,控制把字符类型的输入清除
[^\n] 输入的字符除了换行\n之外的集合
1的解析:将所有不等于\n的字符扔掉
2的解析:将输入的一个字符去掉。