说我有一个数字x,使x.length =500。在位置5和8的左边说,我想插入一个数字。但是我想插入一个数字,使它可以遍历所有数字。因此,从本质上讲,它经历了所有10 ^ 2的可能性。
然后,我想尝试所有可能性并执行“ if语句”以返回正确的可能性。
我考虑过将其更改为字符串,将其插入所需的位置,然后将其更改回数字。但是我认为这可能效率不高。然后,如果我想检查所有数字,效率会进一步降低。
我非常关心效率,因为我的目的是插入两个以上的数字。我想在位置125、315等7或8,依此类推。这很大(10 ^ 8)。我也想再次检查所有这些数字。
我尚未编写代码,因为我不知道如何正确执行此操作。
对不起,我的英语水平
答案 0 :(得分:0)
将500位数字转换为字符串,然后转换为列表,然后转换为数字
# Here's an example of a long number
big_number = 1111111111111111111111111111111111111111111111111
# Make it a string
big_number_string = str(big_number)
# Add each char to a list
big_num_list = [y for y in big_number_string]
# ['1','1','1','1','1',...]
# Insert '0' at index 10
big_num_list.insert(10, '0')
# [...'1','1','1','0','1',...]
# Join everything together and make it a number again
big_num_new = int(''.join(big_num_list))
print(big_num_new)
>> 11111111110111111111111111111111111111111111111111
答案 1 :(得分:0)
import itertools
def gen_candidates(number, indices):
# inserting at an index will make all larger indices off by one
powers_of_ten = [10 ** (i + index) for i, index in enumerate(sorted(indices))]
for power in powers_of_ten:
everything_less = number % power
number = ((number - everything_less) * 10) + everything_less
for value_at_digit in itertools.product(range(10), repeat=len(indices)):
yield number + sum(
value * power for value, power in zip(value_at_digit, powers_of_ten)
)
result = list(gen_candidates(11111111111111111111111111111, [0, 0, 22, 14, 6, 7, 7, 8]))
print(len(result), result[0], result[-1])
# 100000000 1111111011111111011111101001011111100 1111111911111111911111191991911111199
然后您可以像这样使用此生成器
# will try 12304050, 12304051, 12304052 etc.
for number in gen_candidates(12345, [0, 1, 2]):
if is_the_right_one(number):
do_whatever(number)
有了8个索引,在我的桌面上大约需要2分钟。 for
循环会在其他数字更改时一遍又一遍地添加相同的数字,因此您可以稍微提高性能。或以更快的语言重写代码。