989. 数组形式的整数加法

第一个方法暴力

class Solution:
    def addToArrayForm(self, num, k):
        le=len(num)-1
        ans=0
        for i in num:
            ans=ans+i*pow(10,le)
            le=le-1
        res=ans+k
        ls=[]
        while res:
            ls.append(res%10)
            res=res//10
        return ls[::-1]

第二个逐位相加

让我们逐位将数字加在一起。例如计算 123+912,我们从低位到高位依次计算 3+2、2+1 和 1+9。任何时候,若加法的结果大于等于 10,把进位的 1 加入到下一位的计算中,所以最终结果为 1035。

公式

当前位 = (A 的当前位 + B 的当前位 + 进位carry) % 10

注意,AB两数都加完后,最后判断一下进位 carry, 进位不为 0 的话加在前面。 

加法模板:

while ( A 没完 || B 没完)
    A 的当前位
    B 的当前位

    和 = A 的当前位 + B 的当前位 + 进位carry

    当前位 = 和 % 10;
    进位 = 和 / 10;
    A=A/10
   B=B/10

判断还有进位吗

 

class Solution:
    def addToArrayForm(self, num, k):
        le=len(num)-1
        carry=0#进位
        ls=[]
        while le>=0 or k:
            if le<0:
                x=0
            else:
                x=num[le]
            if k==0:
                y=0
            else:
                y=k%10
            #当前位
            sum=x+y+carry
            carry=sum//10
            k=k//10
            le-=1
            ls.append(sum%10)
        if carry:
            ls.append(carry)
        return ls[::-1]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值