java中数字2^1000的位数之和 import java.math.*; 公共类PowerDigitSum{ 公共静态void main(字符串[]args){ 双[]位; 数字=新的双精度[302]; 双i=数学功率(21000); 双c=301; 双c1=0; 双d=0; 而(c>=0){ c1=数学功率(10,c); d=数学楼层(i/c1); i=i-d*c1; 数字[(int)c]=(int)d; c=c-1; } 双和=0; c=0; 而(c
由于双值的有限性,你无法对其进行正确的计算java中数字2^1000的位数之和 import java.math.*; 公共类PowerDigitSum{ 公共静态void main(字符串[]args){ 双[]位; 数字=新的双精度[302]; 双i=数学功率(21000); 双c=301; 双c1=0; 双d=0; 而(c>=0){ c1=数学功率(10,c); d=数学楼层(i/c1); i=i-d*c1; 数字[(int)c]=(int)d; c=c-1; } 双和=0; c=0; 而(c,java,Java,由于双值的有限性,你无法对其进行正确的计算 您可能可以使用BigDecimal修复代码,但使用biginger要容易得多。提示:它有一个pow方法,您可以计算从到字符串的数字和由于双值的有限性,无法对其进行正确的计算 您可能可以使用bigdecime修复代码,但使用biginger要容易得多。提示:它有一个pow方法,您可以计算从到字符串的数字和由于双值的有限性,无法对其进行正确的计算。请使用bigdecime,或在您的cas中使用e BigInteger就足够了。@deHaar,为什么?这不是
您可能可以使用
BigDecimal
修复代码,但使用biginger
要容易得多。提示:它有一个pow
方法,您可以计算从到字符串的数字和由于双值的有限性,无法对其进行正确的计算
您可能可以使用bigdecime
修复代码,但使用biginger
要容易得多。提示:它有一个pow
方法,您可以计算从到字符串的数字和
由于双值的有限性,无法对其进行正确的计算。请使用bigdecime,或在您的cas中使用e BigInteger就足够了。@deHaar,为什么?这不是一个很难计算的数字,您只需要大约1000位来存储它(如果愿意,可以使用uint1000),将最高有效位设置为1,其余的设置为0,这样就可以了。@M.Prokhorov它对于简单的数据类型来说太大了…将它们存储在位中当然可以…但是更正:注释是不合格的。@ernest_k更具可读性:BigInteger.TWO.pow(1000).toString().chars().map(c->c-'0').sum()
Thread on code Review关于同一个问题:由于双精度值的有限性,您无法对其进行正确的计算。使用BigDecimal,或者在您的情况下使用BigInteger就足够了。@deHaar,为什么?这不是一个很难计算的数字,您只需要大约1000位来存储它(如果愿意,请使用uint1000),将最高有效位设置为1,其余的设置为0,这样就可以了。@M.Prokhorov它对于简单的数据类型来说太大了…将它们存储在位中当然可以…但是更正:注释是不合格的。@ernest_k更具可读性:BigInteger.TWO.pow(1000).toString().chars().map(c->c-'0').sum()
关于同一个问题的代码审查线程:我不知道Project Euler的目标是什么,但使用BigInteger库是否存在欺骗行为?at的已接受答案也使用BigInteger,所以…我不知道Project Euler的目标是什么,但使用BigInteger库是否存在欺骗行为?at的已接受答案也使用BigInteger,所以。。。
import java.math.*;
public class PowerDigitSum {
public static void main(String[] args) {
double[] digits ;
digits = new double[302];
double i = Math.pow(2, 1000);
double c = 301;
double c1 = 0;
double d = 0;
while(c>=0) {
c1 = Math.pow(10, c);
d = Math.floor(i/c1);
i = i - d*c1;
digits[(int)c] = (int)d;
c = c-1;
}
double sum = 0;
c = 0;
while (c<302) {
sum = sum+digits[(int)c];
c= c+1;
}
System.out.println(sum);
}
}