版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/little_white__/article/details/82725662
题目:将一个数字翻转,但是如果超出int_32的表示范围,则输出0
C++:
注意要在溢出前判断。
int reverse(int x) {
int num = 0;
int flag = 1;
if(x < 0)
{
x = -x;
flag = 0;
}
while(x)
{
if(num > (INT_MAX - x % 10) / 10 || num < (INT_MIN + x % 10)/10)
return 0;
num = num * 10 + x % 10;
x = x / 10;
}
if(!flag)
num = -num;
return num;
}
};
Python:
解法一:按照C++的思想做。
def reverse(self, x):
num = 0
flag = 1
if x < 0:
x = -x
flag = 0
while(x):
num = num * 10 + x % 10
if num > 2**31 - 1 or num < -2**31:
return 0
x = x // 10
if flag == 0:
num = -num
return num
解法二:采用字符串直接翻转,需要注意负数
def reverse(self, x):
x = str(x)[::-1]
if x[-1] == '-':
x = x[-1] + x[:-1]
x = int(x)
if x > 2**31 - 1 or x < -2**31:
x = 0
return x
遇到的问题:
- c++中,2e31是double类型,不能直接与x作比较
- Python中// 是整除
- python的切片处理