算法原理
INT_MAX 代表int的最大值2147483647
INT_MIN 代表int的最小值-2147483648
所以在将字符串转化为数字,倒置数字等操作时,可以在
temp=temp*10+x%10;
这一步操作之前先进行判断
if(temp>INT_MAX/10) return 0;
//当加之前temp>214748364时,因为下一步temp要*10,所以肯定会超限,直接返回0
if(temp==INT_MAX/10&&x%10>7) return 0;
/*如果temp=214748364时,因为下一步temp*10=2147483640,所以当x%10小于等于7的时候才可以成立,否则就返回0*/
if(temp<INT_MIN/10) return 0;
//如果temp=-2147483640时,因为下一步要*10,所以会超限,直接返回0
if(temp==INT_MIN/10&&x%10<=-8) return 0;
//如果temp=-214748364,与上面同理,当x%10>-8的时候才能成立,否则就不行
temp=temp*10+x%10;
x/=10;
核心代码实现
int temp=0;
while(x){
if(temp>INT_MAX/10) return 0;
if(temp==INT_MAX/10&&x%10>7) return 0;
if(temp<INT_MIN/10) return 0;
if(temp==INT_MIN/10&&x%10<=-8) return 0;
temp=temp*10+x%10;
x/=10;
}
return temp;
}
例题

这篇博客探讨了在处理整数转换时如何避免溢出问题,例如在将字符串转化为整数(atoi)和判断回文数的过程中。通过使用INT_MAX和INT_MIN来检查中间结果temp,确保在乘以10之前不会超出int的范围。这种方法在LeetCode的7.整数反转、8.字符串转换整数和9.回文数等题目中有实际应用。
1357

被折叠的 条评论
为什么被折叠?



