一个整数翻转问题需要注意溢出的地方
描述:其实就是将一个有符号的32位整数进行翻转,例如:123-->321, 120-->21,-123-->-321这种,
其实思路很简单,就是用模运算一步一步的将每一位取出,不断的乘10,直至模运算取出的数是0
package
TestDemo;
import
java.util.*;
public
class
Test1 {
public
static
void
main(String[]
args
){
Scanner
in
=
new
Scanner(System.
in
);
int
x
=
in
.nextInt();
int
y
=
reverse
(
x
);
System.
out
.println(
y
);
in
.close();
}
static
int
reverse(
int
x
){
int
number
= 0;
while
(
x
!= 0){
int
z
=
x
% 10;
int
newnumber
=
number
* 10 +
z
;
if((newnumber -z)/ 10 != number ){
return
0;
//在这里因为
int
的最大值为2147483647
}
// 当 2147483640 + 9/8的时候就发生了溢出
number
=
newnumber
;
x
=
x
/10;
}
return
number
;
}
}
需要注意的地方就是高亮的那个地方,因为可能产生溢出,所以需要进行判断,当溢出的时候新的值与原来值不相等了就。
有人说从数学的角度来说用减法来判断不好,改成
if(newnumber/10 == number){
}
这样更好,不太懂,不过效果一样