标签:10 MIN INT MAX rev 初级 力扣 int 算法
实现代码:
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的使用有些懵懂。
(以下是官方解释)
标签:10,MIN,INT,MAX,rev,初级,力扣,int,算法 来源: https://www.cnblogs.com/181118ljh123/p/11838362.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。