工号系统由小写英文字母(a-z)和数字(0-9)两部分构成。新工号由一段英文
字母开头,之后跟随一段数字,比如"aaahw0001",“a12345”,“abcd1”,“a00”
注意新工号不能全为字母或者数字,允许数字部分有前导 0 或者全为 0。
但是过长的工号会增加同事们的记忆成本
现在给出新工号至少需要分配的人数X 和新工号中字母的长度 Y
求新工号中数字的最短长度 Z。
一行两个非负整数 X Y,数字用单个空格分隔
输出新工号中数字的最短长度 Z
示例1:
输入
260 1
输出
1
示例2:
输入
26 1
输出
1
说明
数字长度不能为0
示例3:
输入
2600 1
输出
2
import java.util.*;public class Main {public static final int LETTER_NUMBER = 26;public static final int DIGIT_NUMBER = 10;public static void main(String[] args) {Scanner sc = new Scanner(System.in);while (sc.hasNext()) {String[] str = sc.nextLine().split("\\s");if (str.length == 2) {int people = Integer.parseInt(str[0]);int letter = Integer.parseInt(str[1]);int number = count(people, letter);System.out.println(number);}}}public static int count(int people, int letter) {//英文字母是26的次方,而数字的次方,只需要加到大于人数int i = 0;while ((Math.pow(LETTER_NUMBER, letter) * (Math.pow(DIGIT_NUMBER,i))) < people) {i++;}if (i == 0) {return 1;} else {return i;}}
}
工号由字符和数字组成,英文字母一共有26个,数字字符一共有10个。
根据题目要求,我们使用y 来表示字符的长度,每个位置上都可以使用26个字母中的任意一个,相互之间不影响,因此字符的可以表示的组合数是 26^y个。
我们使用i来表示数字的长度,0-9 一共10个数字,可以使用全0 或者 前导0 数字部分是 10^i个
组合起来一共可以表示的人数是26^y * 10^i个。
题目要求根据可以表示的人数,求最小的i。