如何获取 BigInteger Value 中的所有数字总和?
How to get all digit summation in BigInteger Value?
我有以下问题:
如果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;
}
为什么所有案例在那个问题上都没有成功?
实际问题是Math.pow(n1, n2)
。
在这里,您将两个参数都视为 double
并尝试计算 n1n2,这很容易导致溢出。
相反,您可以使用 BigInteger#pow() 来消除溢出:
BigInteger z = BigInteger.valueOf(n1).pow(n2);
这将解决问题。
我认为您可以通过执行以下操作轻松解决此问题:
步骤 1. 将 n1 转换为 BigInteger
第二步,使用BigInteger原生的幂函数[大整数的幂函数指数必须是int]
步骤 3. 将结果转换回字符串
第 4 步。遍历字符串并计算数字总和。
参考:https://www.tutorialspoint.com/java/math/java_math_biginteger.htm
我有以下问题:
如果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;
}
为什么所有案例在那个问题上都没有成功?
实际问题是Math.pow(n1, n2)
。
在这里,您将两个参数都视为 double
并尝试计算 n1n2,这很容易导致溢出。
相反,您可以使用 BigInteger#pow() 来消除溢出:
BigInteger z = BigInteger.valueOf(n1).pow(n2);
这将解决问题。
我认为您可以通过执行以下操作轻松解决此问题:
步骤 1. 将 n1 转换为 BigInteger
第二步,使用BigInteger原生的幂函数[大整数的幂函数指数必须是int]
步骤 3. 将结果转换回字符串
第 4 步。遍历字符串并计算数字总和。
参考:https://www.tutorialspoint.com/java/math/java_math_biginteger.htm