一,题目描述
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数
标准输入 |
---|
121 |
标准输出 |
---|
true |
示例1:
输入 | -121 |
---|---|
输出 | false |
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数
示例2:
输入 | 10 |
---|---|
输出 | false |
解释: 从右向左读, 为 01 。因此它不是一个回文数。
二,解决办法:
1.将该数字转化为字符串,根据字符串的长度奇偶性,确定中间位置,然后首尾进行对比是否是回文数字。此时需要额外空间来存储字符串,然后进行判断
2.将前半部分或者后半部分其中一部分的数据逆转之后和另一部分作比较,看看是否一样,如果一样的话,则证明该数字为回文数,否则不是回文数
3.逐个数字进行比较,例如将第一个数字和最后一个数字进行对比,前面的数字加加,后面的数字减减,直至中间位置
算法思想:
在这里,使用将数字逆转之后与原数字比较这一方法判断
表示将原数据逆转,可以取个位数字后将原数字去除个位数字后循环操作,给上次取得的数字乘以十并加上这次取得的数字作为整体,去掉个位数字,循环至所得数字小于零结束循环,比较两个数字是否相等,从而判断是否为回文数字
while(b>0)
{
c=c*10+b%10;
b/=10;
}
if(num==c)
printf("true");
else
printf("false");
三,代码实现
详细代码如下:
#include <stdio.h>
int main()
{
int num,c=0;
scanf("%d",&num);
int b=num;
while(b>0)
{
c=c*10+b%10;
b/=10;
}
if(num==c)
printf("true");
else
printf("false");
}