y=y+(long)(numbers[i]*Math.pow(10,bits-i-1)); 还是不行,error: unmappable character for encoding ASCII我一开始用的int y,就是题干中出的错误,后来考虑到可能溢出才改成的long,看来不是数据类型的错误?
public static void main(String[] args) { System.out.println(reverse(-123)); } public static int reverse(int num){ char[] numArray = null; String numStr=""; if (num == 0) { return 0; } else if (num > 0) { numArray = (num + "").toCharArray(); } else { numStr+="-"; numArray = (num + "").substring(1).toCharArray(); } for(int i =numArray.length-1;i>=0;i--){ numStr+=numArray[i]; } return Integer.valueOf(numStr); }
public class Solution { public static void main(String[] args) { System.out.println(reverse(-132)); } public static int reverse(int x) { int flag = 0; int bits = 0; long y = 0; if (x == 0) { return 0; } if (x < 0) { flag = 1; x = -x; } bits = (int) (Math.log(x) / Math.log(10)) + 1; int[] numbers = new int[bits]; for (int i = 0; i < bits; i++) { numbers[i] = x % 10; x = x / 10; } for (int i = 0; i < bits; i++) { y = (long) (y + numbers[i] * Math.pow(10, bits - i - 1));// 在这一行报错,error:possible loss of precision,我不知道是怎么回事,我之所以用long是怕溢出。 } if (flag == 1) { y = -y; } if (y != (int) y) { return 0; } return Integer.valueOf(y + ""); } } 根据你的代码稍微改了下,可以运行
还是不行,error: unmappable character for encoding ASCII我一开始用的int y,就是题干中出的错误,后来考虑到可能溢出才改成的long,看来不是数据类型的错误?
System.out.println(reverse(-123));
}
public static int reverse(int num){
char[] numArray = null;
String numStr="";
if (num == 0) {
return 0;
} else if (num > 0) {
numArray = (num + "").toCharArray();
} else {
numStr+="-";
numArray = (num + "").substring(1).toCharArray();
}
for(int i =numArray.length-1;i>=0;i--){
numStr+=numArray[i];
}
return Integer.valueOf(numStr);
}
public class Solution {
public static void main(String[] args) {
System.out.println(reverse(-132));
} public static int reverse(int x) {
int flag = 0;
int bits = 0;
long y = 0;
if (x == 0) {
return 0;
} if (x < 0) {
flag = 1;
x = -x;
} bits = (int) (Math.log(x) / Math.log(10)) + 1;
int[] numbers = new int[bits]; for (int i = 0; i < bits; i++) {
numbers[i] = x % 10;
x = x / 10;
} for (int i = 0; i < bits; i++) {
y = (long) (y + numbers[i] * Math.pow(10, bits - i - 1));// 在这一行报错,error:possible loss of precision,我不知道是怎么回事,我之所以用long是怕溢出。
} if (flag == 1) {
y = -y;
} if (y != (int) y) {
return 0;
}
return Integer.valueOf(y + "");
}
}
根据你的代码稍微改了下,可以运行
我不是很明白28行那里,如果不加(long)为什么不行,等式右面是long+int,所以结果不是会强制转long么