一、题目
1.原题
有位客人来自异国,在该国使用m进制计数。
该客人有个幸运数字n(n<m),每次购物时,
其总是喜欢计算本次支付的花费(折算为异国的价格后)中存在多少幸运数字。
问:当其购买一个在我国价值k的产品时,其中包含多少幸运数字?
2.题目理解
[位运算, 进制转换]
二、思路与代码过程
1.思路
把k转换成m进制的字符串,再去和n比较次数。
2.代码过程
①main函数
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入进制数m:");
int m = sc.nextInt();
System.out.println("请输入幸运数字n(n<m)");
int n = sc.nextInt();
System.out.println("请输入购买物品价值k:");
int k = sc.nextInt();
int count = LuckNumCount(m,n,k);
String hm = ToM( k, m);
System.out.println("这次购物的价格"+k+",转换之后为:"+hm+",包含了"+count+"个幸运数字"+n+"。");
}
②LuckNumCount
private static int LuckNumCount(int m, int n, int k) {
String TenToMK = ToM(k,m);//转换
return countOc(TenToMK,n);//计数
}
③ToM
private static String ToM(int k, int m) {
StringBuilder ToMExpression = new StringBuilder();
while (k > 0) {
int remainder = k % m;
ToMExpression.insert(0, remainder); // 插入到字符串的开头
k /= m;
}
return ToMExpression.toString();
}
④countOc
private static int countOc(String tenToMK, int n) {
String luckNum = Integer.toString(n);
int count = 0;
for (char ch : tenToMK.toCharArray()){
if (ch == luckNum.charAt(0)){
count++;
}
}
return count;
}
三、运行结果
1.运行截图
2.带数据分析运行结果
请输入进制数m:
6
请输入幸运数字n(n<m)
3
请输入购买物品价值k:
1997
k0:1997
remainder:5
ToMexpression:5
k1:332
k0:332
remainder:2
ToMexpression:25
k1:55
k0:55
remainder:1
ToMexpression:125
k1:9
k0:9
remainder:3
ToMexpression:3125
k1:1
k0:1
remainder:1
ToMexpression:13125
k1:0
这次购物的价格1997,转换之后为:13125,包含了1个幸运数字3。
3.带数据分析完整代码
import java.util.Scanner;
public class test36 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入进制数m:");
int m = sc.nextInt();
System.out.println("请输入幸运数字n(n<m)");
int n = sc.nextInt();
System.out.println("请输入购买物品价值k:");
int k = sc.nextInt();
//int m = 6;
//int n = 3;
//int k = 1997;
int count = LuckNumCount(m,n,k);
String hm = ToM( k, m);
System.out.println("这次购物的价格"+k+",转换之后为:"+hm+",包含了"+count+"个幸运数字"+n+"。");
}
private static int LuckNumCount(int m, int n, int k) {
String TenToMK = ToM(k,m);//转换
return countOc(TenToMK,n);//计数
}
private static String ToM(int k, int m) {
StringBuilder ToMExpression = new StringBuilder();
while (k > 0) {
System.out.println("k0:"+k);
int remainder = k % m;
System.out.println("remainder:"+remainder);
ToMExpression.insert(0, remainder); // 插入到字符串的开头
System.out.println("ToMexpression:"+ToMExpression);
k /= m;
System.out.println("k1:"+k);
System.out.println();
}
return ToMExpression.toString();
}
private static int countOc(String tenToMK, int n) {
String luckNum = Integer.toString(n);
int count = 0;
for (char ch : tenToMK.toCharArray()){
if (ch == luckNum.charAt(0)){
count++;
}
}
return count;
}
}