给定位数时生成 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 回答也可以。
编辑:
我们不只是解决 666666.....
我希望它对任何数字都是通用的。 7777777777....
或 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)
您可以使用 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)))
生成此类 100000 位以上数字的最快方法是 decimal.Decimal()
:
from decimal import Decimal as D
d = D('6' * n)
测量显示 6 * (10**n - 1) // 9
是 O(n*log n)
而 D('6' * n)
是 O(n)
。虽然对于小 n
(小于 ~10000),前者可以更快。
Decimal
内部表示直接存储十进制数字。如果您需要在后面打印数字; str(Decimal) is much faster than str(int)
.
我有一个有趣的问题,我想生成一个大数字(~30000 位),但它必须是完全相同的数字,例如 66666666666666.......
到目前为止,我已通过以下方式完成此操作:
def fillWithSixes(digits):
result = 0
for i in range(digits):
result *= 10
result += 6
return result
但是这样效率很低,请问有没有更好的办法?用 cpp 或 java 回答也可以。
编辑:
我们不只是解决
666666.....
我希望它对任何数字都是通用的。7777777777....
或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)
您可以使用 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)))
生成此类 100000 位以上数字的最快方法是 decimal.Decimal()
:
from decimal import Decimal as D
d = D('6' * n)
测量显示 6 * (10**n - 1) // 9
是 O(n*log n)
而 D('6' * n)
是 O(n)
。虽然对于小 n
(小于 ~10000),前者可以更快。
Decimal
内部表示直接存储十进制数字。如果您需要在后面打印数字; str(Decimal) is much faster than str(int)
.