自学内容网 自学内容网

Python进制转换

一.任意进制转十进制

基数:表示基本数字符号的个数

  •   十进制:0-9,基数为10
  • 十六进制:0-9 A-F,基数为16

权:每位表示的数值

按权展开法:各位数字与它的权相乘,其积相加,和就是十进制数

用代码实现:

int_to_char="0123456789ABCDEF"  #定义字符串“0-9” “A-F”
char_to_int={}    #创建字典
for idx,chr in enumerate(int_to_char):  #enumerate可以同时获取索引和元素
char_to_int[chr]=idx      #获取字符串中元素对应的整数值

def K_TO_Ten(k,x):
ans=0
x=x[::-1]  #翻转
for i in range(len(x)):
ans = ans+char_to_int[x[i]]*k**i
return ans


k=8
x="3506"
print(K_TO_Ten(k,x))

二.十进制转任意进制

用代码实现:

int_to_char="0123456789ABCDEF"

char_to_int={}

def Ten_to_K(k,x):
#输入 k:int x:int
#输出 ans: str
ans=""
while x !=0:
ans+=int_to_char[x%k]
x//=k 

return ans[::-1]

k=16
x=127
print(Ten_to_K(k,x))

 

例题(任意进制转任意进制)

题目描述

给定一个 NN 进制数 SS,请你将它转换为 MM 进制。

输入描述

第一行为一个整数 TT,表示测试数据数量。 (1≤T≤1051≤T≤105)

每个测试用例包含两行,第一行包含两个整数 N,MN,M。

第二行输入一个字符串 SS,表示 NN 进制数。

数据范围保证:2≤N,M≤162≤N,M≤16,若 N≥10N≥10,则用 A∼FA∼F 表示字码 10∼1510∼15。保证 SS 对应的十进制数的位数不超过 1010。

输出描述

输出共 TT,每行表示一组数据的答案。

输入样例

2
2 10 
10101 
11 2
1793A5068

输出样例

21
10101111001010100111010101011

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 128M

代码:

import sys
input = sys.stdin.readline  #目的是使运行快一点

int_to_char="0123456789ABCDEF"

char_to_int={} #创建字典

for  idx,char in enumerate(int_to_char):
char_to_int[char]=idx

#十进制转任意进制
#k:int x:int
#ans: str
def Ten_to_K(k,x):
ans=""
while x !=0:
ans +=int_to_char[x%k]
x//=k
return ans[::-1]

#任意进制转十进制
#k:int x:str
#ans:int
def K_to_Ten(k,x):
ans=0
x=x[::-1]
for i in range(len(x)):
ans=ans+char_to_int[x[i]]*k**i
return ans

#任意进制转任意进制

T=int(input().strip())

for _ in range(T):
N,M=map(int,input().strip().split())
x=input().strip()
#N进制的x转成M进制
#1.N进制的x转成十进制的y
y=K_to_Ten(N,x)
#2.十进制的y转成M进制的z
z=Ten_to_K(M,y)
print(z)


原文地址:https://blog.csdn.net/menge2333/article/details/145060099

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!