如何获得BigInteger Value中的所有数字求和?

问题描述 投票:2回答:2

我有以下问题:

如果n1和n2是自然数,而n1 <10且n2 <10000。找到z中所有数字的总和,其中z = n1n2。

恩。 n1 = 3, n2 = 10, z= 3^10 = 59049如果你把数字加上5+9+0+4+9= 27。结果= 27 恩。 n1 = 2, n2 = 12, z= 2^12 = 4096如果你把数字加上4+0+9+6 = 19。结果= 19

我目前的解决方案是:

public static long Solving(int n1, int n2) {
    if (n1 >= 0 && n2 >= 0) {
        BigInteger z = BigInteger.valueOf((long) Math.pow(n1, n2));
        long sum = 0;

        for (BigInteger i = z; i.compareTo(BigInteger.ZERO) > 0; i = i.divide(BigInteger.TEN)) {
            sum += Integer.valueOf(String.valueOf(i.remainder(BigInteger.TEN)));
        }
        return sum;

    }
    return 0;
}

为什么所有案例都不能成功解决?

java biginteger
2个回答
6
投票

实际问题是Math.pow(n1, n2)

在这里,您将两个参数视为double并尝试计算n1n2,这很容易导致溢出。

相反,你可以使用BigInteger#pow()摆脱溢出:

BigInteger z = BigInteger.valueOf(n1).pow(n2);

这将解决问题。


0
投票

我认为你可以通过这样的方式轻松解决这个问题:

步骤1.将n1转换为BigInteger

步骤2.使用BigInteger的原生幂函数[大整数的pow函数的指数必须为int]

第3步。将结果转换回字符串

步骤4.迭代字符串并计算数字之和。

参考:https://www.tutorialspoint.com/java/math/java_math_biginteger.htm

https://www.tutorialspoint.com/java/math/biginteger_pow.htm

© www.soinside.com 2019 - 2024. All rights reserved.