栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

LeetCode刷题笔记- 第9题-回文数

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode刷题笔记- 第9题-回文数

LeetCode刷题笔记- 第9题-回文数

题目C代码注意点

避免判断32位整型整数溢出的循环判断技巧

场景问题解决方案实现 题目

C代码
bool isPalindrome(int x){
    int re = 0;
    int ro = 0;

    if (x < 0 || (x != 0 && x % 10 == 0))
        return false;
    if (x == 0)
        return true;
    ro = x;
    while (ro > 0) {
        if (re == ro || (re == (ro/10)))
            return true;
        if (re > ro)
            break;
        re = (re * 10) + (ro % 10);
        ro /= 10;
    }
    return false;
}
注意点
    负数不可能是回文数;个位上含是0的数不可能是回文数;避免判断32位整型整数溢出的循环判断技巧;
避免判断32位整型整数溢出的循环判断技巧 场景

当判断1000000009是否回文数时,如果完整调换各位会得到一个9000000001的数,该数会大于231-1=2147483647,导致溢出情况;

问题

那么有什么办法可以避免这种溢出的冲突吗?

解决方案

考虑到待判断的数是在-231 ~ 231-1的范围内,所以按十进制的位数判断,最大为10位,那么取一半,最多就是5位;那么一个最大的5位数乘以10是不可能达到溢出的效果的

实现

如代码中的if(re>ro) break;的条件满足退出了循环,避免了re会超过6位数的可能;

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/768287.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号