实现代码:
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的使用有些懵懂。
(以下是官方解释)