给定一个 32 位有符号整数,将整数中的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储 32 位有符号整数,根据这个假设,如果反转后的整数溢出,则返回 0。
思路1
先求出整数的位数,之后按个十百...的顺序放到数组的第一二...位,求出的总和就是反转后的整数,判断反转后的数溢出,用该数减去上次的和,得出的数如果不等于之前相加的数,说明溢出
实现代码
class Solution {
public int reverse(int x) {
int j=0;
int temp=x;
while(temp!=0)//判断该数有几位
{
temp/=10;
j++;
}
int []a=new int[j];//将该数放到数组,个位放到数组第一位,以此类推
int sum=0;
int i=0;
while(i<j){
a[i]=x%10;
int t=sum;
sum+=a[i]*Math.pow(10,j-1-i);//求出反转后的数
if(sum-t!=a[i]*Math.pow(10,j-1-i)){//现在的总和减去上次的总和,得不到该数,说明溢出
return 0;
}
temp=sum; //保留上次的和
i++;
x=x/10;
}
return sum;
}
}
class Solution {
public int reverse(int x) {
long sum=0;
while(x!=0){
sum=sum*10+x%10;
x=x/10;
if(sum>Integer.MAX_VALUE || sum < Integer.MIN_VALUE){
return 0;
}
}
return (int) sum;
}
public int reverse(int x)
{
int result = 0;
while (x != 0)
{
int tail = x % 10;
int newResult = result * 10 + tail;
if ((newResult - tail) / 10 != result)
{ return 0; }
result = newResult;
x = x / 10;
}
return result;
}