Description
输入一个整型数,判断是否是对称数,如果是,输出yes,否则输出no,不用考虑这个整型数过大,int类型存不下,不用考虑负值;
例如 12321是对称数,输出yes,124421是对称数,输出yes,1231不是对称数,输出no
Input
一个整型数
Output
输出是yes,或者no
思路描述:
该题的关键是如何用C语言来判断某个数对称的问题。我最开始想的是可不可以先通过位数,将其个位、十位、百位···分割开来,然后存入多个变量,再写一个循环,首先将最后一个位上的数和第一个位上的数进行是否相等的判断,再推倒数第二个位上的数和第二个位上的数进行判断,但是,这样就会出现位数为奇数和偶数的情况,并且我们一开始并不知道输入的数为多少位,那么还要写一个判断输入的数为几位数的程序,若输入的数为一百位一千位一万位呢。显然这个方法是不切实际的。
那么这道题怎么做呢?我们观察对称数,可以发现它还有一个特征是,如果你把对称数逆置过来,得到的数仍与原来的数相等,例如1234554321的逆置数为1234554321,而1234的逆置数为4321,显然1234不是对称数。由此我们可以得到,判断是不是对称数可以通过将这个数逆置,然后与原数判断是否相等,就可以得到结论。
在C语言里如何将一个数逆置呢?
我们举一个例子来分析,输入的数为1234,求它的逆置数。将1234对10取余,也就是1234%10,得到的结果是1,也是该数的个位。那么如何拿到该数的十位、百位、千位呢?我们要先将1234/10得到123,再重复之前的对10取余的运算,得到该数的十位,也就是2,百位、千位也是同样的操作,我们就可以写一个循环,将1234的每个位剥离出来。
当然,剥离出来后,我们要记得写一个变量在循坏里用来存放逆置后的数。
所以,该题的代码如下:
#include <stdio.h>
//判断输入的数是否为对称数
//特点:对称数逆置后与本身相等
int main() {
int a;
scanf("%d",&a);
int b=0,backup_a;//b用来存逆置后的a,backup_a负责备份最初的a
backup_a=a;
while(a)
{
b=b*10+a%10;
a=a/10;
}
if(b==backup_a){
printf("yes");
}
else{
printf("no");
}
return 0;
}