给定一个 32 位有符号整数,将整数中的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。
这个题目中需要注意的是如何翻转与是否会溢出
解决方案如下
通过设置一个中间值,每一次挪一位数字的方式进行反转
int rev=0;
while(x!=0){
pop = x%10;(取当前末尾数字)
x/=10;(取除末尾外的其他数字)
rev=rev*10+pop;(末尾数字前挪)
}
比如123
pop = 123 %10 -> pop = 3;
x = 123/10 -> x = 12;
rev = 0 * 10 + 3 -> rev = 3
pop = 2
x = 1
rev = 30 +2 =32
->321 逆转OK
现在考虑是否溢出
题目已给
最大值是2147483647
最小值-2147483648
在反转的最后一步的时候,才会可能产生溢出,若rev此时比max_int / 10大或者比 min_int / 10 小的话,那后面只要进位就会溢出。
最后 如果 rev = max_int / 10 或者 rev = min_int / 10时,就要考虑最后一位和 7 -8的大小比较,如果小于或等于7 大于或等于-8的话就没有产生溢出
此时就完成了反转数字