【问题标题】:Sum of very very large numbers [closed]非常非常大的数字的总和[关闭]
【发布时间】:2019-12-14 06:08:59
【问题描述】:

给定两个非常大的数字 ab 其中a < b,问题是要找到以下总和:

a + (a + 1) + (a + 2) + ... + (b - 2) + (b - 1) + b

数字ab 可以非常非常大(可以包含数百万位数字)。

由于这些数字非常大,编程语言无法使用整数数据类型求和。 所以,唯一的选择就是使用字符串。

最有效的方法是什么?

【问题讨论】:

  • 这个问题有两个问题:1.没有尝试过任何方式2.不是特定于编程的。大多数情况下,当您在 SO 上发布未尝试的家庭作业问题时,它会被否决。
  • 这个系列不是(b-a)*((b-a)/2+a)吗?
  • 这个问题没有显示任何研究工作。

标签: algorithm data-structures time-complexity largenumber


【解决方案1】:

编程语言无法使用整数数据类型求和。所以,唯一的选择就是使用字符串。

这是错误的。当然,您不能用 32 位或 64 位 int 表示一百万位整数,但这并不意味着最好的选择就是使用字符串。您可以使用库来处理大量数字,请参阅"arbitrary precision arithmetic"——它可以让您表示可用内存允许的最大数字。

在这个总和的情况下,如果m = b-a,你想要a*(m+1) + sum(1 ...m)。总和可以通过高斯公式用一次乘法计算。 That multiplication can be done in O(n^1.47) 其中n是位数,各种加法运算是O(n),我假设除以2可以很快,所以整个时间复杂度就是乘法的时间复杂度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    相关资源
    最近更新 更多