整数反转
题目描述:
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围
[−2的31次方, 2的31次方 − 1] ,就返回 0。
示例:
输入:123
输出:321
int reverse(int x){
long n=0;
while(x!=0){
n=n*10+x%10;
x/=10;
}
return n;
}
这是第一次的代码
这里解释一下整个代码的运行过程,按照示例的输入输出来
我们输入x=123
x | n |
---|---|
123 | 3 |
12 | 32 |
1 | 321 |
0.1 | x<0,循环结束 |
代码运行后没有出错,提交答案
可以看出解答错误
发现没有解决反转之后的数字有没有溢出
对代码进行修改
int reverse(int x){
long n=0;
while(x!=0){
n=n*10+x%10;
x/=10;
}
if (n > pow(2, 31) || n < -pow(2, 31)-1)
//判断反转后整数是否超过32位的有符号整数的范围
return 0;
else
return n;
}
提交答案
解答正确