BASIC 10-12 基础练习 进制转换

BASIC-10 十进制转十六进制

问题描述

  十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有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

解决思路1:利用python内置的进制转换函数

python内置进制转换函数

十进制转二进制:bin(x)

十进制转八进制:oct(x)

十进制转十六进制:hex(x)

二进制转十进制:int(x, 2)

二进制转八进制:int(x, 8)

二进制转十六进制:int(x, 16)

num = int(input())
print(str(hex(num))[2:].upper())

解决思路2:循环求余构造十六进制数

假设整数x可表示为3位的16进制数$h_2 h_1 h_0$,则 $x=h_2*16^2 + h_1*16^1 + h_0*16^0$。通过循环除16的方式,每次循环将高位向低位移动,即从个位开始逐个求解$h_i$。

num = int(input())
if num==0:
	print(0)
else:
	s = []
	while num:
			m, num = num%16, int(num/16)
			if m >= 10:
					s.append(chr(m+55))
			else:
					s.append(m)
	for i in range(len(s)):
			print(s[len(s)-i-1],end='')

BASIC-11 十六进制转十进制

问题描述

  从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
  注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。

样例输入

FFFF

样例输出

65535

解决思路1:使用python 内置进制转换函数

num = str(input())
print(int(num, 16))

解决思路2:循环构造十进制数

num = str(input())
ans = 0
counter = len(num)-1
while len(num):
    c = num[0]
    num = num[1:]
    if ord(c) >= 65:
        ans += (ord(c)-55) * pow(16, counter)
    else:
        ans += int(c) * pow(16, counter)
    counter -= 1
print(ans)

BASIC-12 十六进制转八进制

问题描述

给定n个十六进制正整数,输出它们对应的八进制数。

输入格式

输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。

输出格式

输出n行,每行为输入对应的八进制正整数。
【注意
  输入的十六进制数不会有前导0,比如012A。
  输出的八进制数也不能有前导0。

样例输入

2
39
123ABC

样例输出

71
4435274
提示】先将十六进制数转换成某进制数,再由某进制数转换成八进制。

十六进制转八进制有两种方法:

1. 十六进制转二进制,二进制转八进制:1位十六进制对应4位二进制,3位二进制对应1位8进制

2. 十六进制转十进制,十进制转八进制

解决:使用python 内置进制转换函数

n = int(input())

for i in range(n):
    num = str(input())
    num_i = int(num, 16)
    print('{:x}'.format(num_i))
    # res_2=oct(res_1)
    # print(res_2[2:])

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_44645726

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值