python 实现字符串加法

给定两个由数字组成的字符换num1和num2,计算它们的和,不能用内置的加法方法。

基本思路就是竖式计算的过程,两种方法,其中涉及一些容易出错的地方,代码中都做了注释。

# 两个字符串(合法的数字字符串)相加,不能用内置库
# 算竖式的思想,个位对齐,相加,并把进位传递到下一位

def add_strings(a, b):
    len_a = len(a)
    len_b = len(b)
    x = len_a - len_b
    if x > 0:
        b = '0' * x + b
    else:
        a = '0' * (-x) + a
    n = max(len_a, len_b)
    carry = 0  # 进位标志
    res = ''
    for i in range(n - 1, -1, -1):  # 逆序,即从最低位开始,因此遍历的下标是n-1->0,最后一个-1表示逆序
        # x = '0' if i > len_a - 1 else a[i]  # 注意python三元表达式的写法,尤其是else后没:
        # y = '0' if i > len_b - 1 else b[i]
        x, y = a[i], b[i]
        sum_x_y = (ord(x) - ord('0')) + (ord(y) - ord('0'))  # python 不能字符串不能直接相减,需ord转化为ASCII再运算

        res = str((sum_x_y + carry) % 10) + res
        carry = int((sum_x_y + carry) / 10)
    if carry:  # 遍历到字符串结束后,还应加上最后一位进位(若不为0)
        res = str(carry) + res
    return res

#优化
def add_strings1(a,b):
    i = len(a)
    j = len(b)
    carry = 0 #进位
    res = ''
    while i>0 or j>0 or carry:  # 对于不确定在哪里停止的循环,就用while,用i来控制循环次数
        x=a[i-1] if i>0 else '0'
        y=b[j-1] if j>0 else '0'
        sum_x_y = (ord(x) - ord('0')) + (ord(y) - ord('0'))
        res = str((sum_x_y+carry)%10) + res
        carry = int((sum_x_y+carry)/10)
        i -= 1
        j -= 1
    return res

if __name__ == '__main__':
    print(add_strings('123','456'))
    print(add_strings('789', '456'))
    print(add_strings('1234567890', '9876543210'))
    print(add_strings1('1234567890', '9876543210'))

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值