工号系统由小写英文字母(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。