(最开始源于牛客网上的一道编程题 : [编程题] 数制转换)
将X进制转为int十进制的功能函数:(乘X次方各位数的加和法)
# 将X进制转为int十进制的功能函数:(乘X次方各位数的加和法) def XToInt(strNum,X): sum = 0 strNum = strNum.lstrip("0") #去掉开始的0(前导零) length = len(strNum) for i in range(length): sum += ABCToNum(strNum[i])*(X**(length-i-1)) return sum
将int十进制转为Y进制的功能函数:(除Y取余法)
# 将int十进制转为Y进制的功能函数:(除Y取余法) def intToY(num,Y): res = "" while (num!=0): # temp= # temp= res = str(NumToABC(num%Y))+res num = num//Y #取商 # res = int(res) res.upper() return res
其中的辅助函数为:
# 辅助功能函数 def ABCToNum(char): if char in "0123456789": return int(char) if char in "Aa" : return 10 if char in "Bb": return 11 if char in "Cc" : return 12 if char in "Dd": return 13 if char in "Ee" : return 14 if char in "Ff": return 15 # 辅助功能函数 def NumToABC(intN): if intN in [0,1,2,3,4,5,6,7,8,9]: return intN if intN ==10 : return 'A' if intN ==11 : return 'B' if intN ==12 : return 'C' if intN ==13 : return 'D' if intN ==14 : return 'E' if intN ==15 : return 'F'
该题的完整实现代码:
# 辅助功能函数 def ABCToNum(char): if char in "0123456789": return int(char) if char in "Aa" : return 10 if char in "Bb": return 11 if char in "Cc" : return 12 if char in "Dd": return 13 if char in "Ee" : return 14 if char in "Ff": return 15 # 辅助功能函数 def NumToABC(intN): if intN in [0,1,2,3,4,5,6,7,8,9]: return intN if intN ==10 : return 'A' if intN ==11 : return 'B' if intN ==12 : return 'C' if intN ==13 : return 'D' if intN ==14 : return 'E' if intN ==15 : return 'F' # 将X进制转为int十进制的功能函数:(乘X次方各位数的加和法) def XToInt(strNum,X): sum = 0 strNum = strNum.lstrip("0") #去掉开始的0(前导零) length = len(strNum) for i in range(length): sum += ABCToNum(strNum[i])*(X**(length-i-1)) return sum # 将int十进制转为Y进制的功能函数:(除Y取余法) def intToY(num,Y): res = "" while (num!=0): # temp= # temp= res = str(NumToABC(num%Y))+res num = num//Y #取商 # res = int(res) res.upper() return res def NumberSystemConversion(): X,strInput,Y = input().split() intA = XToInt(strInput,int(X)) outB = intToY(intA,int(Y)) print(outB) NumberSystemConversion()
结果可以为: