【问题标题】:How to find sum of separate digits of a number?如何找到一个数字的不同数字的总和?
【发布时间】: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 算术太低级了。

标签: java char sum int


【解决方案1】:

long 无法保存该号码。您必须使用可以重写的数据类型。

有关指针,请参阅Large Numbers in Java

【讨论】:

猜你喜欢
  • 2010-11-16
  • 1970-01-01
  • 1970-01-01
  • 2019-02-01
  • 2014-12-07
  • 1970-01-01
  • 2012-03-11
  • 2021-08-09
相关资源
最近更新 更多