题目:给定一个 32 位有符号整数,将整数中的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
注意:
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。
编码思路:按照输入整数的位数,对整数进行遍历,每次训练获取最后面的尾数,将其挪到最前面,并得到一个新的整数。
出现的错误:
- 当输入的数字为负数时,反转的整数末位会多出一个0,解决办法:对正负整数进行区分,对负数去除符号位得到其位数。
public static int reverse(int x) {
long a = 0;
int b =0;
if(x>=0){
b=(x+"").length();//正数
}
else{
b=(x+"").length()-1;//负数多了一个符号位
}
while (x!=0){
for(int i=0;i<b;i++){
int a1 = x%10;//当前最后一位数字
x=(x-a1)/10;//把最后一位数字剔除掉的新数字
a += (int) (a1*Math.pow(10,b-i-1));
}
}
if((a>Math.pow(2,31)-1)||(a<(-1)*Math.pow(2,31))){
return 0;
}
return (int) a;
}