Программа сложения двух чисел. В массиве S записываются 10, почему? необходимо, чтобы там просто был 0. Где ошибка?

from random import randint
N = 10
a = [0]*10
for i in range(N):
    a[i] = randint(0, 9)
    a1=''.join([str(i) for i in a])
print(a1)
b = [0]*10
for i in range(N):
    b[i] = randint(0, 9)
    b1=''.join([str(i) for i in b])
print(b1)
i = 9
m = 0
s = [0]*10
for i in range(N):
    s[i] = a[i] + b[i]
    if s[0] == 0:
        s1 = '1' + s1
    if s[i] >= 10:
        if (s[i] % 10 == 0):
            s[i] = 0
        else:
            s[i] = (s[i] % 10)
        s[i-1] = s[i-1] + 1
    s1 = ''.join([str(i) for i in s])
print(s)
print(s1)

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

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

a1=''.join([str(i) for i in a]) один раз после цикла

s[i-1] = s[i-1] + 1 почему это только один разряд увеличиваем? А если перенос дальше распространится?

Правильный вариант сложения в соответствии с тем, как в школе учили складывать длинные числа:

from random import randint
N = 10
a = [0]*10
for i in range(N):
    a[i] = randint(0, 9)
a1=''.join([str(i) for i in a])
print(a1)
b = [0]*10
for i in range(N):
    b[i] = randint(0, 9)
b1=''.join([str(i) for i in b])
print(b1)
perenos = 0
s = [0]*10
for i in reversed(range(N)):
    s[i] = a[i] + b[i] + perenos
    perenos = s[i] // 10
    s[i] %= 10
if perenos:
    s.insert(0, 1)
s1 = ''.join([str(i) for i in s])
print(s)
print(s1)

1092458445
2119549414
[3, 2, 1, 2, 0, 0, 7, 8, 5, 9]
3212007859


9088543011
8341444614
[1, 7, 4, 2, 9, 9, 8, 7, 6, 2, 5]
17429987625
→ Ссылка