一、题目
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;}
}