最快的方法是在给出位数时生成66666这样的数字

时间:2015-11-16 20:33:28

标签: python random numbers time-complexity

我有一个有趣的问题,我想生成一个大数字(~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. 怎么样?
  3. 字符串操作更糟糕,从当前复杂度O(n)增加到O(n^2)

3 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:1)

您可以使用 ljust rjust

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)))

答案 2 :(得分:0)

使用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)