最近开始刷刷的题,遇到了一道这么一个简单的题 ,然而并没有看上去的那么简单,
特殊的坑就如这道题说的 overflow !
一开始天真的认为就是每个语言自己定义的最大整数,如
在python中
>>import sys>>print sys.maxint>>2147483647
在c++中:
#includeint main(){ std::cout<< (unsigned int) -1<
于是按照这个认识,所写代码如下:(选python是因为用到了python的内置函数的特性)
class Solution: # @param {integer} x # @return {integer} def reverse(self, x): import sys if x > (sys.maxint) : return 0 if x >= 0 : return int(str(x)[::-1]) if int(str(x)[::-1]) < sys.maxint else 0 else: return 0-int(str(-x)[::-1]) if int(str(-x)[::-1]) < sys.maxint else 0
Input: 1534236469Output: 9646324351Expected: 0
事实证明太年轻,后来仔细阅读了提示,才发现
原来这不是一个简简单单的例子的假设,而是题目要求,于是改写为下面的代码:
class Solution: # @param {integer} x # @return {integer} def reverse(self, x): import sys if x > (2**31-1) : return 0 if x >= 0 : return int(str(x)[::-1]) if int(str(x)[::-1]) < (2**31-1) else 0 else: return 0-int(str(-x)[::-1]) if int(str(-x)[::-1]) < (2**31) else 0
这样结果就正常了,
下面是用c++写的:
#define max_int (1<<31)-1class Solution {public: int reverse(int num) { bool flag = (num<0)?0:1;//判断输入的数的正负 num = (num>0)?num:-num;//以非负数处理 int result = 0; if (num>max_int) {return 0;} while(num!=0){ if (result >(max_int-num%10)/10){return 0;} //如果已经overflow,就会比max_int小,这样判断 result = result*10 + num%10; std::cout<<