Программа сложения двух чисел. В массиве 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