本次考题共有两道编程题,博主在这里进行我第一题思路的讲解:
题目名称:数制转换
由于人类长了十根手指,所以人类的计数最常用的数制就是十进制。 但是,计算机中最常用的进制是二进制,因为二进制 可以用比较少的物理状态来表示。 可是二进制只有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会自动将其解释为十六进制,因此不需要特别判断。