一、题目
有位客人来自异国,在该国使用 m 进制计数。
该客人有个幸运数字n(n < m),每次购物时,其总是喜欢计算本次支付的花费(折算为异国的价格后)中存在多少幸运数字。
问:当其购买一个在我国价值 k 的产品时,其中包含多少幸运数字?
二、输入
第一行输入为 k,n,m。其中:
k 表示该客人购买的物品价值(以十进制计算的价格)
n 表示该客人的幸运数字
m 表示该客人所在国度采用的进制
三、输出
输出幸运数字的个数,行末无空格
四、示例
输入:
10 2 4
输出:
2
五、题解
- 本题主要考察进制的转换;也可以参考编程语言自带的 API
5.1 Java 实现
package org.stone.study.algo.ex202411;
import java.util.Scanner;
public class DigitBaseConversion {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int k = scanner.nextInt();
int n = scanner.nextInt();
int m = scanner.nextInt();
if(n >= m) {
return;
}
int ans = getLuckyNumberCnt2(k, n, m);
System.out.println(ans);
}
private static int getLuckyNumberCnt(int k, int n, int m) {
int cnt = 0;
while(k != 0) {
int digit = k % m;
if(digit == n) {
cnt++;
}
k = k / m;
}
return cnt;
}
private static int getLuckyNumberCnt2(int k, int n, int m) {
String str = Integer.toString(k, m);
String searchStr = String.valueOf(n);
int pos = 0;
int cnt = 0;
while(pos != -1) {
pos = str.indexOf(searchStr, pos);
if(pos != -1) {
cnt++;
pos += searchStr.length();
}
}
return cnt;
}
}
5.2 Python实现
def countLuckyNumber(k, n, m):
cnt = 0
while k != 0:
if k % m == n:
cnt += 1
k //= m
return cnt
if __name__ == "__main__":
k, n, m = map(int, input().split())
res = countLuckyNumber(k, n, m)
print(res)