python найти k-ную цифру в произведении огромных чисел из '1'

я попытался в тупую умножить два числа на '1' и умножить их друг на друга,затем найти k-ную цифру, но ограничение длинны n и m аж 10**18, так что выдает OverFlowError:

n,m,k = map(int,input().split())
n = '1' * n     #ошибка на этой строке к примеру с данными 11111111111111111 1111111111111111(оба числа <10**18) 1
m = '1' * m
stroka = int(n) * int(m)
print(str(stroka)[k-1])

как устранить ошибку, ну или как найти число номер k в произведении чисел из одних единиц , не работая с такими большими числами?


Ответы (1 шт):

Автор решения: n1tr0xs

Как вариант:

def main(n:int, m:int, k:int):
    if n > m:
        n, m = m, n
    mult_len = n+m-1
    if k > mult_len:
        return
    if n == 1:
        return '1'
    res = ''.join([str(i) for i in range(1, n+1)[::-1]])
    res_len = len(res)
    num = 1
    result = ''
    while res_len + len(result) < mult_len:
        result += str(num)
        if num < n:
            num += 1
    result += res
    return result[k-1]
    
n = int(input('n: '))
m = int(input('m: '))
k = int(input('Позиция: '))

print(main(n, m, k))
→ Ссылка