Java - long显示错误的值

时间:2015-07-14 20:46:11

标签: java rest long-integer

我必须创建一个从1到100的程序,并计算从分区得到的数字的单独产品,其余为0,1,2,3,所以基本上我必须计算4种不同的产品。

我尝试用两种方式解决这个问题,两种方式都显示错误的结果:

首次尝试:

    public class prodmod4 {
public static void main(String[] args){
    int i, k=0;
    long P=1;
    while(k<4){
        for(i=1;i<=100;i++){
            if(i%4==k){
            P=P*i;
            }
        }
        System.out.printf("Produsul numerelor care au restul %d este: %d\n", k, P);
        i=1;
        P=1;
        k++;
    }
}
}

当我运行这个程序时,它给了我:

  

休息0的数字的乘积是0,休息1 -6661643765781265135,   休息2 -2885954222765899776,休息3 -9150527387120197261

第二次尝试:

public class prodmod4v2 {
public static void main(String[] args){
    int i;
    long zero=1, unu=1, doi=1, trei=1;
    for(i=1;i<=100;i++){
        switch(i%4){
        case 0:
            zero=zero*i;
            break;
        case 1:
            unu=unu*i;
            break;
        case 2:
            doi=doi*i;
            break;
        case 3:
            trei=trei*i;
            break;
        default:
            break;
        }
    }
    System.out.printf("produsul numerelor care au resturile 0,1,2,3 sunt:\n zero:%d\n unu:%d\n doi:%d\n trei:%d\n", zero, unu, doi, trei);
}
}

当我运行时,我的输出与第一次尝试相同。

提前谢谢!

1 个答案:

答案 0 :(得分:5)

你的数字太大而不仅仅是long,它支持的数字最多为2 ^ 63 - 1.当发生这种情况时,结果会被称为overflow - 这意味着结果不是你期望他们是什么。要解决此问题,您必须使用支持较大数字的内容,例如BigIntegerBigDecimal