给定一个 32 位有符号整数,将整数中的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。
分析:如果x等于0,则直接返回0。若x为整数,可以通过对整数x每次取最后一位,然后每次当加入新的一位时,前面的位都乘以10,将得到的反转数储存在int类型的res中,然后判断与231 − 1的大小关系,决定是输出0,还是反转之后的数。若x为负数,则可以通过取其的绝对值,然后通过与整数一样的方式得到反转数,最后判断-res与−231的大小关系即可。
代码实现:GCC
int reverse(int x) {
int num = x;
int max = 0x7fffffff; //最大int值
int is_pos = (num > 0) ? 1 : 0; //符号位
int getnum = 0;
if (!is_pos) num = -num;
while (num)
{
if (getnum != 0 && max / getnum < 10 && max / getnum > -10)
return 0; //处理越界
getnum = getnum * 10 + num % 10;
num /= 10;
}
if (!is_pos) getnum = -getnum;
return getnum;
}
int main(){ //此处为一个测试例子
int num = -123;
printf("%d\n", reverse(num));
}