Я не совсем понимаю требование «не могу использовать никакие встроенные функции». Какой смысл в использовании языка. При этом используется только тип списка для добавления и реверсирования (среза):
def add_two_array(arr1, arr2):
def arr_to_int(arr):
n = e = 0
for d in arr[::-1]:
n += d*10**e
e += 1 # would be easier to use enumerate
return n # return sum(d*10**e for e, d in enumerate(arr[::-1])
total = arr_to_int(arr1) + arr_to_int(arr2)
result = []
while total:
result.append(total%10)
total //= 10
return result[::-1]
In []:
add_two_array([1, 2, 3], [4, 5, 6])
Out[]:
[5, 7, 9]
In []:
add_two_array([9, 8, 7], [6, 5, 4])
Out[]:
[1, 6, 4, 1]
Альтернативным (немного более уродливым) способом было бы использование обратного индекса и перенос остатка. Использует троичный оператор для установки значения по умолчанию 0:
def add_two_array(arr1, arr2):
result = []
rem = 0
for i in range(max(len(arr1), len(arr2))-1, -1, -1):
n = (arr1[i] if i < len(arr1) else 0) + (arr2[i] if i < len(arr2) else 0) + rem
result.append(n%10)
rem = n//10
if rem:
result.append(rem)
return result[::-1]
In []:
add_two_array([9, 8, 7], [6, 5, 4])
Out[]:
[1, 6, 4, 1]