链接:整数反转
题目描述:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例1:
输入:123
输出:321
示例 2:
输入: -123
输出: -321
示例 3:
输入:120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
源码(Java):
package pid7;
import java.lang.Math.*;
public class Solution {
public static int Reverse(int x){
long num = x;
boolean flag=false;//若小于0,则为true;大于0,为false
int a[]=new int[10];
int i=0;
int divisor=1000000000;
long result = 0;
if(num < 0){
num= -num;
flag=true;
}
while(divisor != 0){
a[i]=(int)(num/divisor);//数组a长度必为10
num=num-a[i]*divisor;
divisor=divisor/10;
i++;
}
for(i=0;i<10;i++){//先确定num共有多少位
if(a[i]!=0){
break;
}
}
int n=i;//记录数字的长度
int factor = 1;
for(i=n;i<10;i++){
if(factor==1000000000 && a[i]>2){
return 0;
}
result = result + a[i]*factor;
factor = factor*10;
}
if(flag){
result = -result;
}
if(result > 2147483647 || result < -2147483648){
return 0;
}
return (int)result;
}
public static void main(String[] args) {
int num1 = -2147483648;
long result1 = Reverse(num1);
int num2 = 1563847412;
long result2 = Reverse(num2);
System.out.println("执行的结果1是:");
System.out.println(result1);
System.out.println("执行的结果2是:");
System.out.println(result2);
}
}
疑惑点:
这道题麻烦的地方在于反转后溢出的情况,所以在过程中我只能用long先来存储,不然不知道怎么判断溢出。32-35这段代码看起来很冗余,因为函数结尾判断过溢出了。可是不知道为什么,不加这几行代码,主函数中的第一个用例通过不了。
收获:
经过本题,我对于静态方法有了直观的感悟。