📅  最后修改于: 2023-12-03 15:12:47.048000             🧑  作者: Mango
这道题来自于2008年的门|门CS考试中,属于计算机科学与技术的题目,考察了程序员的算法能力和编程能力。
给定一个十进制数 $n$,将其转换为 $k$ 进制数,并且统计其中 $0$ 的个数。
输入共两行。第一行为两个整数 $n$ 和 $k$,使用空格隔开。第二行仅包含一个整数 $m$,表示需要统计 $0$ 的个数。
输出共一行,仅包含一个整数,表示 $n$ 在 $k$ 进制下有 $m$ 个 $0$的数的个数。
首先,我们需要将十进制数转换成 $k$ 进制数。可以使用短除法的方法进行转换:
然后,我们需要统计 $k$ 进制数中 $0$ 的个数,可以直接将 $k$ 进制数按位存储,然后统计 $0$ 出现的次数即可。
def count_zeros(n: int, k: int, m: int) -> int:
def convert_base(num: int, base: int) -> List[int]:
res = []
while num:
res.append(num % base)
num //= base
return res[::-1]
base_n = convert_base(n, k) # 转换成 k 进制数
zero_count = base_n.count(0) # 统计 0 的个数
res = 0
for i in range(len(base_n)):
if base_n[i] == 0:
zero_count -= 1
if zero_count == m:
res += 1
if base_n[i] == 0:
zero_count += 1
return res
以上代码是一个 Python 3 的示例实现,使用了列表来存储 $k$ 进制数的各位数字,可以更直观方便地进行统计。