题目
Given a 32-bit signed integer, reverse digits of an integer.
给出一个32位的有符号整数,进行反转
注意:
假设我们的环境只能存储得下 32 位的有符号整数, 则其数值范围为 [?2^31, 2^31 ? 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
例子
321----> 123
-210----->-12
解题思路
- 为什么要特别提出只能存得下32位这个概念,还必须要考虑溢出的情况
- 取余数就是最后一位的数,负号不影响结果
- 为什么通过(2^31-1)/10就可以知道是否溢出……因为输入的数也一定在范围内,所以x的第一位只能是1或者2,即res的最后一位只能是1或者2……最后得出结论不符合的数字无法输入,所以不用check。详见分析处
代码
class Solution {
public:int reverse(int x) {
int res = 0;while (x != 0){
if(abs(res) > INT_MAX/10) return 0;//溢出则返回0,为什么凭这个判断?res = res*10+x%10;x/=10;}return res;}
};
问题
如果题中没有限制必须存整型的变量,就也可以用long型变量保存计算结果,最后返回的时候判断是否在范围内。