class Solution {
public int reverse(int x) {
int ans = 0;
while (x != 0) {
int val = x % 10;
int tmp = ans;
ans = ans * 10 + val;
if ((ans - val) / 10 != tmp) {
return 0;
}
x /= 10;
}
return ans;
}
}
我开始使用此代码来解决反向数字问题。如果我在纸上做,并以负数作为输入,我会得到不同的结果。我相信它与java处理Mod的方式有关。如果有人能解释这个案子,请。
-429在纸上给我186在计算机上-924为什么?
答案 0 :(得分:0)
循环3次:
第一个循环:
int ans = 0;
while (x != 0) { //x = -429
int val = x % 10; //val = -9
int tmp = ans; //tmp = 0
ans = ans * 10 + val; //ans = -9
if ((ans - val) / 10 != tmp) { //false
return 0;
}
x /= 10; //x=-42
}
第二个循环:
int ans = 0;
while (x != 0) { //x = -42
int val = x % 10; //val = -2
int tmp = ans; //tmp = -9
ans = ans * 10 + val; //ans = -92
if ((ans - val) / 10 != tmp) { //false
return 0;
}
x /= 10; //x = -4
}
第三循环:
int ans = 0;
while (x != 0) { //x = -4
int val = x % 10; //val = -4
int tmp = ans; //tmp = -92
ans = ans * 10 + val; //ans = -924
if ((ans - val) / 10 != tmp) { //false
return 0;
}
x /= 10; //x = 0
}
return -924