【发布时间】:2017-05-15 08:59:52
【问题描述】:
我正在尝试解决 Project Euler #16:
2^15 = 32768,其位数之和为 3 + 2 + 7 + 6 + 8 = 26。
2^1000 的位数和是多少?
问题看起来很简单,但我没有使用模数 10,而是尝试像这样解决问题:
public class Main {
public static void main(String[] args) {
long number = (long) Math.pow(2,100);
long sum=0;
String number2 = String.valueOf(number);
char[] digits = number2.toCharArray();
for (char digit : digits) {
sum = sum + digit;
}
System.out.println(sum);
}
}
但是它给出了错误的答案,我看不到我的错误,难道不能用这种方式解决这个问题吗?
【问题讨论】:
-
2^100 不适合 long,您需要查看 BigInt 类型
-
但是我不能将
Math.pow(2,100)投给BigInteger? -
是的,你不能,但 pow 毕竟只是一个乘法
-
除了 long 的存储限制之外,您可能还想看看如何添加数字。正如你所拥有的,你正在添加数字的每个数字的 ASCII 值。您应该尝试从每个数字中减去 48,然后再将其添加到总数中以获得其数值。
-
@Andrevin,最好使用
Character.getNumericValue()或Character.digit()。 ASCII 算术太低级了。