【算法】 进制转换(附蓝桥杯真题) python
模板
k进制 --> 十进制
code:
def char_to_int(c):
if '0' <= c <= '9':
return ord(c) - ord('0')
if 'A' <= c <= 'F':
return ord(c) - ord('A') + 10
def base_10(s: str, k: int) -> int:
res = 0
n = len(s)
for i in range(n):
res = res * k + char_to_int(s[i])
return res
print(base_10('10111', 2)) # 23
print(base_10('3506', 8)) # 1862
十进制 --> k进制
code:
def int_to_char(i):
if 0 <= i <= 9:
return chr(ord('0') + i)
elif 10 <= i <= 15:
return chr(ord('A') + i - 10)
def base_k(s: str, k: int) -> str:
s = int(s)
res = ''
while s > 0:
res += int_to_char(s % k)
s //= k
return res[::-1]
print(base_k(23, 2)) # 10111
print(base_k(1862, 8)) # 3506
小试牛刀
https://www.lanqiao.cn/problems/1230/learning/
n进制 --> m进制 (n进制 --> 10进制 , 10进制 --> m进制)
AC_code:
import sys
input = sys.stdin.readline
# k进制 --> 十进制
def char_to_int(c):
if '0' <= c <= '9':
return ord(c) - ord('0')
if 'A' <= c <= 'F':
return ord(c) - ord('A') + 10
def base_10(s: str, k: int) -> int:
res = 0
n = len(s)
for i in range(n):
res = res * k + char_to_int(s[i])
return res
# 十进制 --> k进制
def int_to_char(i):
if 0 <= i <= 9:
return chr(ord('0') + i)
elif 10 <= i <= 15:
return chr(ord('A') + i - 10)
def base_k(s: str, k: int) -> str:
s = int(s)
res = ''
while s > 0:
res += int_to_char(s % k)
s //= k
return res[::-1]
t = int(input())
for _ in range(t):
n, m = map(int, input().split())
s = input().strip()
tmp = str(base_10(s, n))
print(base_k(tmp, m))
真题演练
第十五届蓝桥杯省赛Python组A题
AC_code:
def base_k(s, k):
res = ''
while s:
res += str(s % k)
s //= k
return res[::-1]
ans = 0
for i in range(1, 2025):
tmp1 = base_k(i, 2)
tmp2 = base_k(i, 4)
cnt1, cnt2 = 0, 0
for j in range(len(tmp1)):
cnt1 += int(tmp1[j])
for k in range(len(tmp2)):
cnt2 += int(tmp2[k])
if cnt1 == cnt2:
ans += 1
print(ans)
END
如果有更多问题或需要进一步的帮助,可以在评论区留言讨论哦!
如果喜欢的话,请给博主点个关注 谢谢