热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Leetcode7ReverseInteger数论

题意:将整数倒置,该题简单但是需要注意数据的范围,难得的好题。如果出现1000000003或者-2000000003,倒置后的数超过int的范围,因此返回0,出现这种情况可以使用longlong

题意:将整数倒置,该题简单但是需要注意数据的范围,难得的好题。

如果出现1000000003或者-2000000003,倒置后的数超过int的范围,因此返回0,出现这种情况可以使用long long,也可以在在乘以10时进行判断。

注意:Leetcode是用linux环境的,所以他用的是g++4.78编译器,不是vc++编译器,为此在vc++编译器上我们用__int64,而g++编译器就是long long,这些是64位的int,很有用的东西,不做过相关的竞赛或者项目的人,大部分人都不知道C++有64位的int。

当然现在的编译器都支持C++11标准,就不要用__int64或long long,而是用int64,当然还有int128,Leetcode的编译器仅仅支持C++03标准,跟不上时代了,是不是更新下?当然这是题外话。。

然后给出两种解法:

long long的解法,很黄很暴力。。。

class Solution {
public:
    int reverse(int x) {
        long long ans = 0;
        int sign = 1;
        if(x <0){
            sign = -1;
            x = -x;
        }
        for(; x; x/= 10){
            ans = ans * 10 + (x % 10);
        }
        ans *= sign;
        if(ans > (long long)2147483647) return 0;
        if(ans <(long long)-2147483646) return 0;
        return ans;
    }
};

int + 乘之前判断的解法,设计相对精妙

class Solution {
public:
    int reverse(int x) {
        unsigned int MAX = 1<<31;
        int ans = 0;
        int sign = 1;
        if(x <0){
            sign = -1;
            x = -x;
        }
        for(; x; x/= 10){
            if(ans > MAX / 10) return 0;//乘之前的判断,防止溢出
            ans = ans * 10 + (x % 10);
        }
        
        return ans*sign;
    }
};

 


推荐阅读
author-avatar
多米音乐_34026248
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有