题意:给你一个整数,输出它的反转形式,保证符号不变,前端不包含空余的0,特别注意当数字反转后如果溢出32位整形,应该输出0。
解题思路:定义一个ans为0,对输入的数逐位取出,将ans乘以10之后加上该数,模拟数学进位。每次操作之前需判断ans的绝对值有没有超过最大值INT_MAX=0x7FFFFFFFF除以10,如果超过了则说明下一步操作后将发生溢出,此时返回0;
class Solution {
public:
int reverse(int x) {
int ans = 0;
while(x != 0)
{
if(abs(ans) > INT_MAX / 10) return 0;
ans = ans * 10 + x % 10;
x /= 10;
}
return ans;
}
};