CSDN周赛第41期题解(Python版)

本次考题共有两道编程题,博主在这里进行我第一题思路的讲解:

题目名称:数制转换
由于人类长了十根手指,所以人类的计数最常用的数制就是十进制。 但是,计算机中最常用的进制是二进制,因为二进制 可以用比较少的物理状态来表示。 可是二进制只有0和1两个数字,很容易写得很长,所以也经常使用八进制或十六进制。 八进制的数使用0到7八个数字来表示,逢八进一。 十六进制的数除了0到9这十个数字以外,还使用A到F这六个字母(A 到F分别代表十进制的10到15)一共十六个符号来表示,逢十六进一。 请把输入的数字转换为十进制。 如果数字中只有0 和1,那么就认为是二进制。 如果数字中只有0到7,那么就认为是八进制。 如果数字中有不止0到7,那么就认为是十六 进制。 如果出现了0到9、A到F(不区分大小写)之外的字母,那么就请输出“NaN”
 

由于我采用的是python语言,相比于其他语言,这道题上我有很大的优势,我的思路如下:

def convert_to_decimal(num):
    if set(num) - set('0123456789abcdefABCDEF') != set():
        return 'NaN'
    if set(num) <= set('01'):
        return int(num, 2)
    elif set(num) <= set('01234567'):
        return int(num, 8)
    else:
        return int(num, 16)

num = input("请输入一个数字:")
print(convert_to_decimal(num))

程序中首先判断输入的数字是否包含0到9和A到F(不区分大小写)之外的字符,如果包含,则输出“NaN”。然后判断输入的数字属于哪种进制,使用内置函数int()的不同进制转换来转换为十进制。最后输出转换结果。

注意,如果输入的数字以0x或0X开头,则Python会自动将其解释为十六进制,因此不需要特别判断。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值