Java - long 显示错误值
Java - long displays wrong values
我必须创建一个从 1 到 100 的程序,并计算除以 4 的数字的单独乘积,其余为 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++;
}
}
}
当我 运行 这个程序时它给我:
The product of numbers with rest 0 is 0, rest 1 -6661643765781265135,
rest 2 -2885954222765899776, rest 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);
}
}
当我 运行 时,我得到了与第一次尝试相同的输出。
提前致谢!
你的数字太大了 long
, which supports numbers up to 2^63 - 1. When this happens, the result is said to overflow - which means that the results are not what you'd expect them to be. To solve this, you must use something that supports larger numbers, like BigInteger
or BigDecimal
。
我必须创建一个从 1 到 100 的程序,并计算除以 4 的数字的单独乘积,其余为 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++;
}
}
}
当我 运行 这个程序时它给我:
The product of numbers with rest 0 is 0, rest 1 -6661643765781265135, rest 2 -2885954222765899776, rest 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);
}
}
当我 运行 时,我得到了与第一次尝试相同的输出。
提前致谢!
你的数字太大了 long
, which supports numbers up to 2^63 - 1. When this happens, the result is said to overflow - which means that the results are not what you'd expect them to be. To solve this, you must use something that supports larger numbers, like BigInteger
or BigDecimal
。