Ваш комментарий, «One of number would consist of 1s and 0s», кажется, что вы не хотите, чтобы «умножать большие числа », но просто замаскируйте одну строку с другой, состоящей из« 1 »и« 0 ». Вам не нужно конвертировать в int
и умножать на это, и вам не нужно использовать print
в цикле. Попробуйте вместо этого:
>>> p, q = "6993123", "1111000"
>>> ''.join(c if b == "1" else "0" for c, b in zip(p, q))
'6993000'
Это должно быть гораздо быстрее, чем ваш код, но не O (1). Поскольку у вас есть n разных символов для проверки строки, нет способа сделать это менее чем за O (n), даже с распараллеливанием (если у вас нет n ядер).
Для справки, здесь сравнение производительности Agains попарного умножения цифр:
>>> %timeit ''.join(str(int(x) * int(y)) for x, y in zip(p, q))
10000 loops, best of 3: 34.6 us per loop
>>> %timeit ''.join(c if b == "1" else "0" for c, b in zip(p, q))
100000 loops, best of 3: 6.32 us per loop
что, если у вас есть '44' *' 44', что вы ожидаете? – Psidom
Это не Java – john16384
Это довольно ясно, что он спрашивает. Ему нужна сложность O (1) для решения вышеизложенного. –