题目描述
给定一个int型整数,请将各位数字反转。
如果结果大于INT_MAX或小于INT_MIN,请返回0.
注意这里只能用int来写程序,不能用long long.
样例
输入: 123
输出: 321
算法
对于溢出的判断在* 和+号的时候需要特别注意。
两种情况:
1 num >0
2 num <0
C++ 代码
class Solution {
public:
int reverse(int x) {
int num = x;
int res = 0;
bool is_overflow = false;
while(num){
int d = num%10;
if (INT_MAX / 10 < res || res < INT_MIN /10)
is_overflow = true;
else
res = res * 10;
if (num < 0 ){
if (INT_MIN - d > res)
is_overflow = true;
else
res = res + d;
}
if (num > 0){
if (INT_MAX - d < res)
is_overflow= true;
else
res = res + d;
}
num = num / 10;
}
if (is_overflow) return 0;
return res;
}
};