输入: 123 输出: 321
示例 2:
输入: -123 输出: -321
示例 3:
输入: 120 输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [?231, 231 ? 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reverse-integer
第一次只考虑了三位整数,没有思考整数的取值范围问题。
class Solution {
public:
int reverse(int x) {
int bai;
int shi;
int ge,y;
bai = x/100;
shi = x/10%10;
ge = x%10;
y=ge*100+shi*10+bai;
if(x<0)
{
return y=-y;
}
return y;
}
};
测试结果只能满足三位整数,其他情况均不满足
题目有两个注意点 :
在-9到9的数,可以直接输出
溢出的数字,返回0;
中间部分使用while循环来解决。
①. 定义一个新的长整形来存放反转后的数
②. 对x进行取余运算,然后将结构传递给y。比如:321,对10取余为1,将1传递给y,x对10取整,为32;在第二次循环中,将y*10,等于10,然后重复操作,y=12,x=3,y=123,x=0,然后退出循环
class Solution {
public:
int reverse(int x) {
long y=0;
if(x>-9&&x<9){
return x;
}
else{
while(x){
y=y*10;
if(y<=INT_MIN||y>=INT_MAX)
return 0;//溢出
y=y+x%10;
x=x/10;
}
return y;
}
}
};
_@~L5.png)
题目比较简单,但是有细节需要考虑,比如溢出问题,还有代码简化问题。
原文:https://www.cnblogs.com/HanLongfeng/p/11874116.html