Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何计算高于限制的数字,并使用BigInteger_Java_Biginteger - Fatal编程技术网

Java 如何计算高于限制的数字,并使用BigInteger

Java 如何计算高于限制的数字,并使用BigInteger,java,biginteger,Java,Biginteger,下面的代码计算2^15和工作的数字之和。如果我将循环条件更改为15,d2将变为2^16。-->我要2^15。 然后我把它改成999,数字之和不匹配。(总数:1189) 还有别的办法吗 public void go() { int sum = 0; BigInteger d2 = BigInteger.ONE.add(BigInteger.ONE); BigInteger two = d2; for(int i = 0; i < 14;

下面的代码计算2^15和工作的数字之和。如果我将循环条件更改为15,d2将变为2^16。-->我要2^15。 然后我把它改成999,数字之和不匹配。(总数:1189)

还有别的办法吗

public void go()
{           
    int sum = 0;
    BigInteger d2 = BigInteger.ONE.add(BigInteger.ONE);
    BigInteger two = d2;

    for(int i = 0; i < 14; i++)
    {
        System.out.println(d2);
        d2 = d2.multiply(two);
    }

    System.out.println("\n" + d2);

    double val = d2.doubleValue();
    double temp = val;
    while(val > 0)
    {
        temp = val % 10;
        val /= 10;
        sum += temp;
        System.out.println(temp);
    }

    System.out.println("Sum: " + sum);

}
public void go()
{           
整数和=0;
biginger d2=biginger.ONE.add(biginger.ONE);
大整数2=d2;
对于(int i=0;i<14;i++)
{
系统输出打印项次(d2);
d2=d2.乘(二);
}
系统输出打印项次(“\n”+d2);
double val=d2.doubleValue();
双温=val;
while(val>0)
{
温度=val%10;
val/=10;
总和+=温度;
系统输出打印项次(温度);
}
System.out.println(“总和:+Sum”);
}

您可以切换到
double
来计算数字之和,而这看起来正是您所需要的

你会得到如下结果:

temp = d2;

while (temp.compareTo(BigInteger.ZERO) > 0) {           
    BigInteger[] divideAndRemainder = temp.divideAndRemainder(BigInteger.valueOf(10));
    temp = divideAndRemainder[0];
    sum = sum.add(divideAndRemainder[1]);
}

您应该继续使用
BigDecimal
而不是使用
double
,并且根据您正在做的事情(没有尝试得到这个想法),
sum
可能也需要是一个。