Python 给定位数时生成数字(如66666)的最快方法

Python 给定位数时生成数字(如66666)的最快方法,python,random,numbers,time-complexity,Python,Random,Numbers,Time Complexity,我有一个有趣的问题,我想生成一个大数字(~30000位),但它必须是所有相同的数字,比如666666…… 到目前为止,我已经通过以下方式做到了这一点: def fillWithSixes(digits): result = 0 for i in range(digits): result *= 10 result += 6 return result 然而,这是非常低效的,我想知道是否有更好的方法?用cpp或java回答也可以 编辑: 让

我有一个有趣的问题,我想生成一个大数字(~30000位),但它必须是所有相同的数字,比如
666666……

到目前为止,我已经通过以下方式做到了这一点:

def fillWithSixes(digits):
    result = 0
    for i in range(digits):
        result *= 10
        result += 6
    return result
然而,这是非常低效的,我想知道是否有更好的方法?用cpp或java回答也可以

编辑:

  • 让我们不仅仅求解
    666666…..
    我希望它对于任何数字都是通用的。那
    7777….
    44444…..
    55555…..

  • 字符串操作更糟糕,从当前的
    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)))
    
    或:


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

    测量表明
    6*(10**n-1)//9
    O(n*logn)
    D('6'*n)
    O(n)
    。虽然对于较小的
    n
    (小于~10000),前者可以更快


    Decimal
    内部表示法直接存储十进制数字。如果您需要打印后面的数字

    你所说的唯一数字是什么意思。。。。另外,您可以将
    result
    设置为一个字符串,并与
    result+=“6”
    连接,然后返回
    int(result)
    ,但是如果这个数字像您所说的那么大,我很确定它将到达
    int
    限制器,甚至更好,只要
    返回int('6'*位)
    由于
    'str'*int='strstrstrstrstr…'#int次
    @RNar-python的int任意大
    int('6'*10000)
    效果很好。我发现这个答案比其他答案快10^5倍+1@pjs
    6*(10**n-1)/9
    @Nick用所需的数字替换
    6
    (10**n-1)/9
    是所需的1个数,然后可以按任意数字缩放。
    new_number = int("".ljust(30000, str(6)))
    
    from decimal import Decimal as D
    
    d = D('6' * n)