C语言基础 | 判断某个数是否为对称数

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;
}

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值