题目描述:
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例:
输入: 123 输出: 321
输入: -123 输出: -321
输入: 120 输出: 21
注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
思路分析:
这道题是easy,实际上思路是比较简单的,首先用一个数组逆向的存储整数各位,再遍历一次数组,重新构建一遍即可。但是由于这个整数溢出问题,我也磕磕绊绊提交了多次,主要还是自己基础不够扎实。这里需要注意的是如何对于整数溢出进行判断,参考了一个博客的相关内容:https://blog.csdn.net/xiaomingZeng/article/details/80526607
另外也有一些题解采用了更加简洁的方法,没有用我这种这么直接的方式去判断溢出,算是比较巧妙的。可以参考博客:https://www.cnblogs.com/wmx24/p/9149916.html
代码:
1 class Solution { 2 public: 3 int reverse(int x) { 4 if(x>INT_MAX || x<INT_MIN ) 5 return 0; 6 vector<int> num; 7 while(x!=0) 8 { 9 int tmp = x%10; 10 num.push_back(tmp); 11 x = x/10; 12 } 13 int res = 0; 14 int base = 1; 15 for(int i=num.size()-1; i>=0; i--) 16 { 17 18 if(num[i] > INT_MAX/base || num[i] < INT_MIN/base) 19 return 0; 20 if(num[i]<0) 21 { 22 if(base*num[i] < INT_MIN - res) 23 return 0; 24 } 25 else if(num[i]>0) 26 { 27 if(base*num[i] > INT_MAX - res) 28 return 0; 29 } 30 res += num[i]*base; 31 if(i>0) 32 { 33 if(base >= INT_MAX/10) 34 return 0; 35 else 36 base *= 10; 37 } 38 } 39 return res; 40 } 41 };
原文地址:https://www.cnblogs.com/LJ-LJ/p/11107817.html
时间: 2024-11-06 07:06:48