添加到整数的数组形式如何显示完整的结果?

2024-10-02 02:37:58 发布

您现在位置:Python中文网/ 问答频道 /正文

加法到整数的数组形式:假设我有A=[1,2,3]K = 50000,我想把这两个加起来,得到A=[5,0,1,2,3]

在我添加它们并将进位转换为列表之后,但不知何故我无法打印完整的数组:

def addToArrayForm(A, K):
    A[-1] += K
    for i in range(len(A) - 1, -1, -1):
        carry, A[i] = divmod(A[i], 10)
        if i: A[i-1] += carry
    if carry:
        B=list(str(carry))
        A=B+A

    return A

A=[1,2,3]
addToArrayForm(A, 5000)
for i in range(len(A) ):
    print (A[i])

结果表明:1,2,3
但我在期待5,0,1,2,3,问题出在哪里


Tags: in列表forlenifdefrange整数
3条回答

您的原始代码的问题是命令A = B+A没有达到您的预期效果。我不确定,因为您的函数返回一个给定的值(新的、更新的A),但是您的主程序假定列表已经更改

您返回的值就是您期望的值。但是,它不再是原始对象A。表达式B+A建立一个新的列表;您的局部变量A被更改为指向该变量并返回。。。你的主程序忽略了它

做一个简单的改变:

A=[1,2,3]
A = addToArrayForm(A, 50000)    # I corrected this to 50000; you were short a 0

输出:

5
0
1
2
3

更多问题

请注意,这是不可持续的,您不能在此列表上进行额外的计算,因为您将B的元素保留为字符串,而不是整数。我想,你会想把它们转换的


另一种方式

如果您想更改一个in-place,请尝试将这些数字按到列表的开头,in-place

...
    if carry:
        B = list(str(carry))
        for dig in B:
            A.insert(0, int(dig))

A=[1,2,3]
addToArrayForm(A, 50000)
...
def add(a, k):
    return [int(j) for j in str(k + int(''.join(str(i) for i in a)))]

示例

>>> add([1,2,3], 50000)
[5, 0, 1, 2, 3]

您可以通过将A转换为整数,将其添加到K,然后将A替换为总和来完成,这应该可以工作,而不管K(或A)中的位数是多少

def addToArrayForm(A, K):
    a = 0
    for d in A:
        a = a*10 + d
    A[:] = [int(d) for d in str(a + K)]
    return A

A = [1, 2, 3]

addToArrayForm(A, 50000)

for i in range(len(A)):
    print(A[i])

输出:

5
0
1
2
3

相关问题 更多 >

    热门问题