【问题标题】:Sum Of Digits BigInteger数字总和 BigInteger
【发布时间】:2023-03-16 22:07:01
【问题描述】:

我试图找到 BigInteger 的数字总和并找到了这段代码。

BigInteger big = BigInteger.valueOf(2).pow(1000);
String digits = big.toString();
int sum = 0;

for(int i = 0; i < digits.length(); i++) {
    int digit = (int) (digits.charAt(i) - '0');
    sum = sum + digit;
}

System.out.println(sum);

我不明白为什么- '0' 被添加到代码的第 6 行。

int digit = (int) (digits.charAt(i) - '0');

如果我删除那部分,它会给我一个错误的答案。

例如,没有- '0' 的 16 位总和给出 103 而不是 7。

那么,谁能解释一下代码中那部分的重要性?

感谢任何帮助。

【问题讨论】:

  • @azurefrog 谢谢!我明白了:)
  • 顺便说一句,代码是低级的。最好使用Character.getNumericValue() 将 char '6' 转换为 int 6。
  • @OleV.V.是的,明白了。顺便说一句,“这是一个旁白”是什么意思?
  • 我的意思是,您的问题是关于特定代码的,而我的评论不是,因此它无助于回答特定问题。认为无论如何它可能对某些人有用。

标签: java biginteger


【解决方案1】:

代码digits.charAt(i) 为您提供该数字的 ASCII 代码。因此,如果您查看ASCII table,您会看到字符7 的值是55,字符0 的值是48。如果从7 中减去0,您将得到7,这是您要查找的数字。

【讨论】:

  • 感谢您的帮助。我非常感谢。
  • 我也有第二种方法,使用 string.split() for(String rr:n.split("")) { s=s.add(new BigInteger(rr)); }
【解决方案2】:

例如,如果您从digits.getCharAt(i) 获取'5'

'5' - '0' = ?

根据ASCII table可以翻译成:

53 - 48

5 是你要找的结果

【讨论】:

  • '5' 未转换为 5!正如您正确提到的,char '5' 具有 asciicode 53 而 '0' 具有 48。您只需计算两个 asciicode 的差异......是的,使用数字 asciicode 时计算的结果是相同的,但不是由于铸造
  • @Karl 已修复,我让自己继续使用 OP 代码的铸造部分。你是对的
猜你喜欢
  • 1970-01-01
  • 2014-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-23
  • 2016-02-21
相关资源
最近更新 更多