【京东】47幸运数
今天写出来的,现在看来也没那么难。。。。。昨天就死活想不到
package com.company;
import java.util.Scanner;
public class Main {
//n 第几个幸运数 返回几位数
public static int getDigit(int n) {
int digit = 0;
int count = 0;
while (true) {
digit++;
count += Math.pow(2, digit);
if (n <= count) {
break;
}
}
return digit;
}
//获取第n个幸运数
public static String getLuckyNum(int n) {
String ret = "";
int digit = getDigit(n);
int frontCount = 0;
for (int i = 1; i < digit; i++) {
frontCount += Math.pow(2, i);
}
int groupCount = (int) Math.pow(2, digit);
int grougIndex = n - frontCount;
for (int i = 0; i < digit; i++) {
if (grougIndex <= groupCount / 2) {
ret += "4";
} else {
ret += "7";
grougIndex -= groupCount/2;
}
groupCount /= 2;
}
return ret;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextInt()) {
int n = scanner.nextInt();
int[] a = new int[3];
for (int i = 0; i < n; i++) {
a[i] = scanner.nextInt();
}
for (int i = 0; i <n; i++){
System.out.println(getLuckyNum(a[i]));
}
}
}
}
//之前的考虑不周全,参考http://blog.tk-xiong.com/archives/956写了一个又。。。点赞,用格雷码写,牛人好多啊
package com.company;
import java.util.Scanner;
public class Main {
public static void luckNum(long n){
if (n <= 0){
return;
}
long prev = (n-1)/2;
long now = n-2*prev;
if (n ==1){
System.out.print(4);
return;
}else if (n==2){
System.out.print(7);
return;
}else {
if (prev > 0){
luckNum(prev);
}
if (now > 0){
luckNum(now);
}
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextInt()) {
int n = scanner.nextInt();
long[] a = new long[n];
for (int i = 0; i < n; i++) {
a[i] = scanner.nextLong();
}
for (int i = 0;i<n;i++){
luckNum(a[i]);
System.out.println();
}
}
}
}