PAT 1074 宇宙无敌加法器 Python版(String的函数)

题意:

给出每一位上的进制数,问两数之和?两数为非负,位数不超过N(位数 N < = 20 N<=20 N<=20

思路:

这个加法很有意思,每一位都对应一个进制,所以在模拟每个数相加时只要div对应的进制就可以啦~
这道题对字符串函数的用法也是比较综合的。

  • 先填充至同一长度zfill()函数
  • rstrip()函数抹去右端多余的0,相应的其实是数字的前导零
  • 逆序输出用切片 setp = -1。也可以用reversed()函数,得到迭代对象,再转化为list再用join()函数连接,这样显得有点麻烦。

在排错时没考虑到两数是非负,相加结果可能为 0 的情况,在使用rstrip()后把全部的 0 都删完了,导致非零返回,所以要特判。

<<------详细解释见下方----->>

输入:
30527
06203
415
输出:
7201

tag = input()  # 每位对应进制数
n = input()
m = input()

l = len(tag)
m = m.zfill(l)  # 填充至同一长度
n = n.zfill(l)

ans = [0 for i in range(l+2)]  # 考虑最高位有进位,所以多填至少 1 位
for i in range(l-1, -1, -1):
    num = int(n[i]) + int(m[i]) + ans[l-1-i]  # 相应位数相加再加进位
    if tag[i] == '0' or tag[i] == 'd':    # 替换 0,'d' 为 10
        a, b = divmod(num, 10)
    else:
         a, b = divmod(num, int(tag[i]))
    ans[l-1-i] = b  # 低位
    ans[l-i] = a    # 进位

ans = [str(i) for i in ans]  # 先把列表的数字转为 字符
ans = ''.join(ans).rstrip('0')   # 掠过右端的 0
if ans == '':        # 特判
    print(0)
else:
    print(ans[::-1])  # 逆序输出

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值