6 整数反转

Posted on 2019-11-11 20:50  辉仔猿  阅读(181)  评论(0编辑  收藏  举报

 

实现代码:

class Solution {
public:
    int reverse(int x) {
        int rev=0;
        while(x!=0)
        {
            int pop=x%10;
            x=x/10;
            if(rev>INT_MAX/10 ||(rev==INT_MAX/10 && pop>7)) return 0;
            if(rev<INT_MIN/10 ||(rev==INT_MIN/10 && pop<-8)) return 0;
            rev =rev*10+pop;
        }
        return rev;
    }
};

这个代码是参考力扣官网给出的结题思路,具体如下:

将整数x取余获得数字然后成乘10加上下一次取余获得的数字。

(一开始我也是想到取余获取数值,但是没有想到可以新建一个整型数值保存处理之后的数值,也没有考虑到溢出的问题)

 

本题收获:

一、关于INT_MAX和INT_MIN(摘自:https://blog.csdn.net/u010325193/article/details/80287777

INT_MAX和INT_MIN在头文件limits.h中定义。在C/C++语言中,不能够直接使用-2147483648来代替最小负数,因为这不是一个数字,而是一个表达式。表达式的意思是对整数21473648取负,但是2147483648已经溢出了int的上限,所以定义为(-INT_MAX -1)。

C中int类型是32位的,范围是-2147483648到2147483647 。 
(1)最轻微的上溢是INT_MAX + 1 :结果是 INT_MIN; 
(2)最严重的上溢是INT_MAX + INT_MAX :结果是-2; 
(3)最轻微的下溢是INT_MIN - 1:结果是是INT_MAX; 
(4)最严重的下溢是INT_MIN + INT_MIN:结果是0 。

由于我一直对于数值的上溢和下溢没有系统的认识,所以对于INT_MAX和INT_MIN的使用有些懵懂。

(以下是官方解释)