• Python编程题24--回文数


    题目

    现在给定一个整数 x ,请判断 x 是否是回文数,如果 x 是一个回文整数,返回 True ;否则,返回 False 。

    说明:回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

    注意:这里不允许直接使用将整数转换为字符串的方法。

    例如:

    给定一个整数:121,返回结果:True

    给定一个整数:-121,返回结果:False

    给定一个整数:123,返回结果:False

    实现思路1

    • 通过 取模运算 ,每次把整数除以10,得到余数
    • 如果 整数x 小于0,或者被10整除,那么说明该整数 x 必然不是回文数
    • 设置数字反转后的值为 reverse_x ,默认为 0 ;设置 tmp=x ,用于取模运算
    • 通过 while 循环,每次循环对 tmp 进行取模运算,结合余数求出每次循环后的倒序结果 reverse_x,最终判断 reverse_x 与 x 是否相等
    • 上面做法是把所有数字都反转,需要循环 n 次

    例如给定整数 12321 ,按上面思路,得到初始值:reverse_x = 0,tmp = 12321,然后计算如下:

    第 1 次循环: 求出个位上的数 12321 % 10 = 1
    reverse_x = reverse_x * 10 + 1 = 1
    tmp = tmp // 10 = 1232

    第 2 次循环: 求出十位上的数 1232 % 10 = 2
    reverse_x = reverse_x * 10 + 2 = 12
    tmp = tmp // 10 = 123

    第 3 次循环: 求出百位上的数 123 % 10 = 3
    reverse_x = reverse_x * 10 + 3 = 123
    tmp = tmp // 10 = 12

    第 4 次循环: 求出千位上的数 12 % 10 = 2
    reverse_x = reverse_x * 10 + 2 = 1232
    tmp = tmp // 10 = 1

    第 5 次循环: 求出万位上的数 1 % 10 = 1
    reverse_x = reverse_x * 10 + 1 = 12321
    tmp = tmp // 10 = 0

    代码实现

    def isPalindrome(x):
        if x < 0 or (x != 0 and x % 10 == 0):
            return False
        reverse_x, tmp = 0, x
        while tmp > 0:
            reverse_x = reverse_x * 10 + tmp % 10
            tmp = tmp // 10
        return reverse_x == x
    

    实现思路2

    • 通过 取模运算 ,该实现是对上面的方法进行优化
    • 如果 整数x 小于0,或者被10整除,那么说明该整数 x 必然不是回文数
    • 设置数字反转后的值为 reverse_x ,默认为 0
    • 通过 while 循环,每次循环对 x 进行取模运算, 结合余数求出每次循环后的倒序结果 reverse_x,当 x < reverse_x 时,结束循环
    • 最终判断 reverse_x 与 x 是否相等,或者 reverse_x 整除10 后的值与 x 是否相等
    • 上面做法是仅把一半数字都反转,需要循环 n / 2 次

    例如 x=12321,那么循环结束后的最终结果为:reverse_x = 123,x = 12,此时判断 reverse_x 整除10 后的值与 x 是否相等;

    例如 x=123321,那么循环结束后的最终结果为:reverse_x = 123,x = 123,此时判断 reverse_x 与 x 是否相等 。

    代码实现

    def isPalindrome(x):
        if x < 0 or (x != 0 and x % 10 == 0):
            return False
        reverse_x = 0
        while x > reverse_x:
            reverse_x = reverse_x * 10 + x % 10
            x = x // 10
        return x == reverse_x or x == reverse_x // 10
    
    作者:wintest
    本文版权归作者和博客园共有,欢迎转载,但必须在文章页面明显位置给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    2019-2020 ACM-ICPC Latin American Regional Programming Contest A- Algorithm Teaching 二分图
    2019-2020 ACM-ICPC Latin American Regional Programming Contest E
    2019-2020 ACM-ICPC Latin American Regional Programming Contest Finished F
    2019-2020 ACM-ICPC Latin American Regional Programming Contest I
    2019-2020 ACM-ICPC Latin American Regional Programming Contest L
    AcWing 119. 袭击 分治
    luogu P2340 [USACO03FALL]Cow Exhibition G 背包
    AcWing 322. 消木块 区间dp+分治
    AcWing 318. 划分大理石 多重背包三
    AcWing 316. 减操作 线性dp
  • 原文地址:https://www.cnblogs.com/wintest/p/15488750.html
Copyright © 2020-2023  润新知