题目描述
4和7是两个幸运数字,我们定义,十进制表示中,每一位只有4和7两个数的正整数都是幸运数字。前几个幸运数字是:4,7,44,47,74,77,444,447…
现在输入一个数字k,输出第k个幸运数
样例输入
3
5
100
10000000
样例输出
74
744747
44774447447477474444447
代码
public class Test {
private static List<Integer> list = new ArrayList<>();
private static List<Integer> sumList = new ArrayList<>();
public static void main(String[] args) throws Exception {
int n = 10000000;
int sum = 0;
int bits = 0;
for (int i = 1; i < 30; i++) {
if (i == 1) {
list.add(2);
} else {
list.add(list.get(i - 2) * 2);
}
sum += list.get(i - 1);
sumList.add(sum);
if (sum > n) {
bits = i;
break;
}
}
StringBuffer sb = new StringBuffer();
n = n - sumList.get(bits - 2);
for (int i = bits; i > 1; i--) {
if (n > list.get(i - 1) / 2) {
n = n - list.get(i - 1) / 2;
sb.append("7");
} else {
sb.append("4");
}
}
if (n > 1) {
sb.append("7");
} else {
sb.append("4");
}
System.out.println(sb.toString());
}
}
本文介绍了一种算法,用于生成特定类型的幸运数字。这些幸运数字仅由4和7组成,通过递增的方式构建数字序列,直到达到指定的位置。文章提供了一个Java实现的例子,展示了如何高效地计算第k个幸运数字。


被折叠的 条评论
为什么被折叠?



