原题链接:
意思是对于给定的数字,调换最高位和最低位,次高位和次低位......然后输出。如果调换数位后超过了32位int表达范围就输出0。
我的提交(又不知道从哪位大佬博客看到,以后一定记下来说明出处,我自己代码溢出时出错):
class Solution {public: int reverse(int x) { int result = 0; while(x != 0) { if (abs(result) > INT_MAX / 10) return 0; result = (result * 10) + (x % 10); x /= 10; } return result; }};
思想:计算方法一般都是取余加前面结果*10,重点就是结果溢出时的处理,就是这一行代码:
if (abs(result) > INT_MAX / 10) return 0;
在下一次计算前,判断当前结果绝对值是不是大于INT_MAX / 10,从而预测是不是溢出。这个是在我自己做的时候没想到的(关于溢出处理我还写了超级长的判断,结果还是没通过测试用例)
总结:溢出处理