判断一个数字是否是回文数||取整与取余

简介: 判断一个数字是否是回文数||取整与取余

image.png

示例1:
输入:123
输出:false
示例2:
输入:121
输出:ture
示例3:
输入:-121
输出:false

思路:

首先,很显然,若x是负数,那么就一定不是回文数。

若x是正数,那我们进一步判断。

以12345677654321为例,我们会判断最高位和最低位的数字是否相等,即1和1是否相等。最高位的1我们用x除以10000000000000(即10*(x的位数-1))(10的14次),最低位的1我们直接取余就好了。

下一步,我们判断第二高位和第二低位的数字是否相等,即2和2是否相等。这时,第二低位怎么表示呢?当第一次判断完毕之后,给x重新赋值,使x=x/10,那这时,x=1234567765432,这时再对x重新取余就可以表示低位的2了。高位的2,同样,取整,使得x除以1000000000000(即10*(x的位数-2))(10的13次),得到12,再取余可得到2。

那我们需要判断几次呢?这与x是几位数有关。若x是四位数,那么需要两次;若x是五位数,需要两次。若x是七位数,需要三次,x是八位数,需要四次…

所以对于输入的x,我们需要判断x是几位数。下面我是用的函数。

进行完上述步骤,如何判断输入的x是否为回文数呢?

首先想到的就是在循环内部,若判断出来相应位数的两个数字不相等,那就输出“false”。因此,如果不是回文数,是很好处理的。

那对于回文数,我们可以设置一个标志量flag,初始化为1,若判断出不是回文数,则改变flag=0。

进行完循环之后,我们进一步判断flag的值,若flag还是为1,那么就是回文数了。

代码实现:

#include <stdio.h>
#include <math.h>
int fun(int x);
int main (void)
{
    int x,n,i,count;
    int flag=1;
    scanf("%d",&x);
    if (x<0)
    printf("false");
    count=fun(x);n=count; //counnt为x的位数,但后面要用到,但又不想要被修改,于是将此赋值给n
    for (i=1;i<=count/2;i++)
    {
        if ((int)(x/pow(10,n-i))%10 != x%10) //这里要注意%号的两边都必须是整数
        {
            flag=0;
            printf("false");
            break;
        } 
        x=x/10;  
    }
    if (flag==1)
    printf("ture");
    return 0;
}
//函数fun用来判断一个数是几位数
int fun(int x)
{
    int i=0;
    while(x>0)
    {
        i++;
        x=x/10;
    }
    return i;   
}


相关文章
|
11天前
判断一个数是否为回文数
【10月更文挑战第23天】判断一个数是否为回文数。
19 4
|
12天前
判断该数字是几位数
【10月更文挑战第22天】判断该数字是几位数。
9 3
|
1月前
判断一个数字是否为质数
判断一个数字是否为质数。
50 9
|
2月前
判断它是不是回文数
判断它是不是回文数。
40 6
|
5月前
数组\判断是否能被已知且小于x的素数整除
数组\判断是否能被已知且小于x的素数整除
25 0
|
6月前
|
机器学习/深度学习
判断一个数字是否是2的N次方
判断一个数字是否是2的N次方
54 0
|
6月前
分解质因数答疑 为什么只需要枚举到根号N 为什么n % i == 0就是质数
分解质因数答疑 为什么只需要枚举到根号N 为什么n % i == 0就是质数
58 0
|
6月前
|
C语言
判断回文数
C 语言实例 - 判断回文数。
43 1
|
算法 Python
回文数的判断
回文数的判断
103 0