(python)判断一个整数正序(从左向右)和倒序(从右向左)读都是一样的整数,回文数--算法

1、简单方法直接转化为字符串进行处理,转化为字符串后对应的每个位置上的数字都可以通过切片取出

def palindromenum(num):
   num = str(num)
   #此处不管是奇数个还是偶数个直接使用//进行取整
    n = len(num) // 2
    for i in range(0, n):
        if num[i] != num[-i-1]:
            return False
    return True

2、将数字本身反转,然后将反转后的数字与原始数字进行比较,如果它们是相同的,那么这个数字就是回文数。 但是,如果反转后的数字大于int.max,我们将遇到整数溢出问题。所有不能盲目的进行反转,为了避免出现溢出的问题,我们可以仅反转一半的数字,然后与另一半的数字进行比较。

def palindromenum(num):
#用来排除负数和数字末尾为0的数字(其实负数可以不用排除)
    if num < 0 or num % 10 == 0 and num != 0:
        return False
    a = 0
    #当反转后的数字小于剩余数字时继续进行反转,如果为负数此处立刻就不符合因此上方代码可以不排除负数
    while a < num:
       #取出剩余数字的最后一位
        n = num % 10
        #计算剩余数字
        num = (num - n) / 10
        #计算反转后数字
        a = 10 * a + n
    #由于上方代码跳出循环有可能a=num,a>num。等于的可以不判断(回文数),只判断大于的即可,当去掉最后一位两个数字相等的情况下为回文数
    if a > num:
        m = a //10
        if m != num:
            return False
    return True

在计算速度上,第二个方法略优于字符串的方法,具体时间复杂度不清楚,为测试后结果!

你可能感兴趣的:((python)判断一个整数正序(从左向右)和倒序(从右向左)读都是一样的整数,回文数--算法)