PAT乙级题:python1022D进制的A+B (20分)

看到陈越姥姥说20分的题目控制在30分钟之内做完,这道题我刚好用了20分钟。
一开始我想除了二进制和八进制,其他我都不太了解怎么办,好在十进制到二进制的转换给了我灵感,可以写一个D进制的函数一次转化完成。
其实十进制转化为二进制就是不断取余的过程,参考博客[1]中的做法:
在这里插入图片描述

我写出了这个函数:

A,B,D= map(int,input().split(" "))
C = A+B
#提示:十进制转化二进制,除二取余
lst = [] #用来存放D进制数的各位数字
def Djinzhi(c,d):
    while c%d != c:
        lst.append(c%d)
        c = int(c/d)
    lst.append(c%d) #因为如果只有上面的话没办法 算到最后一位
Djinzhi(C,D)
lst.reverse()
D_print = 0
n = len(lst)
for i in range(n):
    D_print = D_print+lst[i]*(10**(n-1-i))
print(D_print)

这里要注意几点,因为我是取一次余然后添加一个元素到列表(顺序添加),并没有倒着添加,这就导致我求出来的D进制其实和真实的D进制是反着的,所以需要用reverse方法将这个list倒过来。

以及一开始我在while循环后忘记再添加一位,这会导致忽略掉一个数。
在这里插入图片描述

references:
[1] https://blog.csdn.net/weixin_42061048/article/details/80140472

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值