给定位数时生成 66666 等数字的最快方法

Fastest way to generate number like 66666 when the number of digits is given

我有一个有趣的问题,我想生成一个大数字(~30000 位),但它必须是完全相同的数字,例如 66666666666666.......

到目前为止,我已通过以下方式完成此操作:

def fillWithSixes(digits):
    result = 0
    for i in range(digits):
        result *= 10
        result += 6
    return result

但是这样效率很低,请问有没有更好的办法?用 cpp 或 java 回答也可以。

编辑:

  1. 我们不只是解决 666666..... 我希望它对任何数字都是通用的。 7777777777....44444........55555... 怎么样?

  2. 字符串操作更糟,从当前的 O(n) 复杂度增加到 O(n^2)

您可以使用公式 666...666 = 6/9*(10**n-1),其中 n 是位数。

因此,在 Python 中,您可以将其写为

n = int(input())
a = 6 * (10**n - 1) // 9
print(a)

您可以使用 ljustrjust:

number = 6
amount_of_times_to_repeat = 30000
big_number = int("".ljust(amount_of_times_to_repeat, str(number)))
print big_number

在一行中:

print int("".ljust(30000, str(6)))

或者:

new_number = int("".ljust(30000, str(6)))

生成此类 100000 位以上数字的最快方法是 decimal.Decimal():

from decimal import Decimal as D

d = D('6' * n)

测量显示 6 * (10**n - 1) // 9O(n*log n)D('6' * n)O(n)。虽然对于小 n(小于 ~10000),前者可以更快。

Decimal 内部表示直接存储十进制数字。如果您需要在后面打印数字; str(Decimal) is much faster than str(int).