西电python:十进制数转换为十六进制数

对于字符串的转换,不使用python库的情况下,可利用先确定最高位,进而一次往下判断其余位数,例如271.先判断最高位位于十六进制第几位,再判断为多少,16*16=256,所以位于第三位,大小为1,进而判断下一位,271-256=15,位于第一位,所以为0x10f
# -*- coding: utf-8 -*-
"""
Created on Tue Nov 10 15:01:14 2020

@author: 11704
"""
def cishu(data):
    i = 0
    while True:
        if data < 16:
            return 0
            break
        if data <16**(i+1) and data >= 16**i:
            return  i
            break
        else:
            i += 1
            
def weishu(data1,n):
    i1 = 1
    while True:
        if data1 < 16:
            return data1
            break
        if data1 >= 16**n*i1 and data1 < 16**n*(i1+1):
            return i1
            break
        else:
            i1 += 1


def main():
    a = int(input())
    e = 0
    if a < 0:
        a = -a
        e=1
    b = [0,1,2,3,4,5,6,7,8,9,'a','b','c','d','e','f']
    c = cishu(a)
    d = weishu(a,c)
    out = [0]*(c+1)
    str1 = ''
    while True:
        
        out[c] = b[d]
        a = a - 16**c*d
        
        if a == 0:
            break
        c = cishu(a)
        d = weishu(a,c)
    out.reverse()
    for i in range(len(out)):
        str1 = str1 + str(out[i])
    if e == 0:
        
        print('0x{}'.format(str1))      
    else:
        print('-0x{}'.format(str1))      
   
if __name__ == '__main__':
    main()
    

另外一种简洁的方法:直接进行相除,a为需要进行转换的数,程序中b为输入的相应进制数。

def main():
    a,b = map(int,input().split())
    out = []
    stri = ''
    list1 = ['A','B','C','D','E','F']
    while True:
        out.append(a%b)
        if a%b == 0:
            a = int(a/b)
        else:
            a = int(a//b)
        if a == 0:
            break
            
    
    for i in out[::-1]:
        if i >= 10:
            i = list1[i-10]
        stri = stri + str(i)
    print(stri)
    
    

if  __name__=='__main__':
    main()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值