-1

两个随机整数数组/列表分别作为大小为 N 和 M 的 ARR1 和 ARR2 给出。两个数组/列表都包含从 0 到 9 的数字(即每个索引处都存在一位整数)。这里的想法是将每个数组/列表表示为数字 N 和 M 本身的整数。您需要找到两个输入数组/列表的总和,将它们视为两个整数并将结果放入另一个数组/列表中,即输出数组/列表也将在每个索引处仅包含单个数字。

注意: 尺寸 N 和 M 可以不同。

输出数组/列表(全为 0)已作为函数参数提供。它的大小总是比更大的数组/列表的大小大一。如果没有进位,则在第 0 个索引处放置 0。

无需打印输出数组/列表的元素。

def sumOfTwoArrays(arr1, n, arr2, m, output) :
    #Your code goes here






#Taking Input Using Fast I/O
def takeInput() :
    n = int(stdin.readline().rstrip())
    if n == 0 :
        return list(), 0
    
    arr = list(map(int, stdin.readline().rstrip().split(" ")))
    return arr, n


#to print the array/list
def printList(arr, n) :
    for i in range(n) :
        print(arr[i], end = " ")
    
    print()


#main
t = int(stdin.readline().rstrip())

while t > 0 :
    arr1, n = takeInput()
    arr2, m = takeInput()
    
    outputSize = (1 + max(n, m))
    output = outputSize * [0]
    
    sumOfTwoArrays(arr1, n, arr2, m, output)
    printList(output, outputSize)
    
    t -= 1

样本输入: 1

3

6 2 4

3

7 5 6

样本输出: 1 3 8 0

4

1 回答 1

0

这个问题可以通过这样一个简单的函数来解决:(注意 - 如果需要满足“奇怪的要求” - '如果没有进位,则将 0 放在第 0 个索引处' . 它作为一个琐碎的练习留下。)

def sum_two_array(L1, L2):
    carry, total = 0, 0
    m, n = len(L1), len(L2)
    k   = max(m, n)
    
    result = [0] + [0] * k  # add +1 

    for i in range(1, k+1):
        a = L1[m-i] if m - i >= 0 else 0
        b = L2[n-i] if n - i >= 0 else 0
     
        total = a + b + carry
        result[k-i + 1] = total % 10
        carry = total // 10
    
    if carry > 0: result[0] = carry
    
    return result if result[0] != 0 else result[1:]

if __name__ == '__main__':
    L1 = [6, 4, 4]
    L2 = [7, 5, 6]

    print(sum_two_array(L1, L2))  # [1, 4, 0, 0]

    print(sum_two_array([6, 2, 4], [7, 5, 6]))  # [1, 3, 8, 0]

    print(sum_two_array([1, 2, 4], [8, 0]))     # [2, 0, 4]
于 2020-12-04T21:25:22.007 回答