LeeTCode.7整数反转
题目描述:
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123
输出:321
示例 2:
输入:x = -123
输出:-321
示例 3:
输入:x = 120
输出:21
示例 4:
输入:x = 0
输出:0
**分析:**将一个数反转,可以通过取余获得末尾数,并通过乘10将之往前移动一位。
本题要注意的点是题目中加粗部分,环境中不允许存储64为整数,即反转过来的数要在范围 [−231 , 231 − 1]内。
231=2147483648;
所以我们需判断反转过来的与与2147483648的大小;
因为我是通过乘10来移动,所以在乘10之前需要判断当前数与2147483648的大小,
如果未提前比较,则之后出现越界的数就会报错。
假设为正数
假设目前的数再乘一次10即将越界。那么当前的数应该<=214748364,并且尾数不大于7;
负数时同理,当前数应该大于等于-214748364,并且并且尾数不大于8;
代码如下:
class Solution {
public int reverse(int x) {
int rev = 0;//定义反转后的数,先置为0
while(x != 0){
int tmp = x%10;//取余,获得尾数
if(rev >214748364 || rev ==214748364 && tmp >7 ){//正数情况,判断是否越界
return 0;
}
if( rev< -214748364 || rev==-214748364 && tmp>8){//负数情况,判断是否越界
return 0;
}
x/=10;//缩短x,去除已经获得的尾数
rev = rev * 10 + tmp;//获得新的反转后的数
}
return rev;
}
}