问题描述
十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E。
给出一个非负整数,将它表示成十六进制的形式。
输入格式
输入包含一个非负整数a,表示要转换的数。0<=a<=2147483647
输出格式
输出这个整数的16进制表示
样例输入
30
样例输出
1E
# 定义一个变量接收用户输入的十进制数字
num = int(input("输入一个整数:"))
# 定义一个数组,存储十六进制
list1 = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']
# 定义一个空数组,用来存储运算之后的值
list2 = []
# 定义一个空字符串,用来最后拼接输出结果
str = ''
# 判断当前用户输入的数字是否小于16,小于直接在list1 里面取值
if num < 16:
# 取值list1存放到list2中
list2.append(list1[num])
else: # 用户输入的值大于十六
# 第一次进行运算
#取余数
num1 = int(num % 16)
# 取整数
num2 = int(num / 16)
# 把余数(小于16)从list1取出放到list2中
list2.append(list1[num1])
# 判断 第一次运算后的值是否小于16,若是小于16 则直接取值存到list2里面
if num2 < 16:
list2.append(list1[num1])
# 此处若是第一次运算之后大于十六会进行的死循环运算
while True:
# 进入死循环,每次取商运算的值若是大于16会接着进行运算
if num2 > 16:
# 取余操作
num1 = int(num2 % 16)
# 取商操作
num2 = int(num2 / 16)
# 取list1对应的值进行添加操作
list2.append(list1[num1])
# 若是经过若干次运算,取商操作小于16 则进行赋值
if num2 < 16:
list2.append(list1[num2])
else: # 经过死循环运算,取商小于16
# 跳出死循环
break
# 循环遍历list2 倒叙输出,进行字符串拼接
for i in range(len(list2), 0, -1):
str += list2[i - 1]
# 输出打印结果
print(str)
来自作者真诚的问候
PS:以上写法是揪掉了若干根头发写出来的,这不是最好的,肯定还有更好的写法。
其实用Python自带的函数只需三两行代码就可以写出来,感兴趣可以查阅相关资料。