这道题仍然属于一道简单题。题目描述是这样的:给定一个32位signed int类型的整数,将它进行反转,如输入123返回321,输入-123返回-321。另外,题目下的提示中也说明了一些特殊情况,一种是输入10、100这样末尾是0的数字时应该返回什么,另外一种是反转1000000003 时,结果有可能溢出。
首先我们先来思考一下为什么上面的结果会溢出。输入整数的类型为signed int,因此用二进制形式表示时,第一位是一个符号位,剩下的31位用来表示数字。231 = 2147483648,所以输入数字的范围是-2147483648 ~ 2147483647
。而1000000003反转的结果是3000000001,超出了上述范围,因此发生了溢出,此时直接返回0即可。代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 |
int reverse(int x) { long long res = 0; while(x) { res = res * 10 + x %10; x /= 10; } if (res > INT32_MAX || res < INT32_MIN) { return 0; } return res; } |