y=y+numbers[i]*Math.pow(10,bits-i-1);把这个结果也强制转为long看看。

解决方案 »

  1.   

    y=y+(long)(numbers[i]*Math.pow(10,bits-i-1));
    还是不行,error: unmappable character for encoding ASCII我一开始用的int y,就是题干中出的错误,后来考虑到可能溢出才改成的long,看来不是数据类型的错误?
      

  2.   

    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);
    }
      

  3.   


    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 + "");
    }
    }
    根据你的代码稍微改了下,可以运行
      

  4.   

    过了这么久才来回复,真不好意思。
    我不是很明白28行那里,如果不加(long)为什么不行,等式右面是long+int,所以结果不是会强制转long么