新手刷leetcode
第七题 整数逆序
题目:
题目注意要点:
- 注意整数只能用32位存储,有溢出风险,因此需要判断逆序后的整数是否溢出,溢出返回0
题目代码:
int reverse(int x){
int ret=0;
while(x!=0){
int digit=x%10;
if(ret< INT_MIN/10 || ret>INT_MAX/10){
return 0;
}
ret=ret*10+digit;
x/=10;
}
return ret;
}
写代码中的注意点及坑:
-
最基本的逆序算法(单步未加循环)
int ret=0; int digit=num%10; ret=ret*10+digit; num/=10;
-
若逆序数溢出,需要在不存储下来的条件下判断其是否溢出(因为要存储就得用64位,而题目只能用32位)
-
INT_MIN和INT_MAX是C语言自带的两个常数,值为int类型的下界和上界,存储在limits.h中
-
通过逆序数在*10之前与最大数(或最小数)除以10后的数进行比较,巧妙的解决判断逆序数是否将越界的问题。
-
理论上,当ret==INT_MAX/10是,digit不能大于7,但是此种情况输入的正序数已经溢出了,所以不存在这个问题
-
若x为负数,则x%10得到的余数也是负数,所以无需额外考虑正负问题。