这是笔试时自己写的代码:

import java.util.Scanner;

publicclass Main {

public static void findLuckNum(int location){

//找出location打印的是几位数

int temp=location+2;

int yushu=0;

int jiweishu=0;

for(int i=1;i<100;i++){

if(temp-Math.pow(2, i)==0){

yushu=0;

jiweishu=i;

break;

}

if(temp>Math.pow(2, i)&&temp<Math.pow(2, i+1)){

yushu=(int) (temp-Math.pow(2, i));

jiweishu=i;

break;

}

}

if(yushu==0){

for(int k=1;k<jiweishu;k++){

System.out.print("7");

}

}

if(yushu!=0){

//这个数为第jiweishu层的第yushu

int record=jiweishu-1;

int tem=yushu;

for(int k=record;k>=0;k--){

tem=(int)(tem-Math.pow(2,k));

if(tem>0){

System.out.print("7");

}else{

  tem=(int)(tem+Math.pow(2,k));

  System.out.print("4");

}

}

}

System.out.println();

}

public static void main(String[] args) {

Scanner input=new Scanner(System.in);

while(input.hasNext()){

int n=input.nextInt();

int[] tem=new int[n];

for(int i=0;i<n;i++){

tem[i]=input.nextInt();

}

for(int j=0;j<n;j++){

Main.findLuckNum(tem[j]);

}

}

}

}
//下面这种是考完写的简单代码

import java.util.Scanner;

publicclass Main {

public static void findLuckNum(int location){

int n=location+1;

String s=Integer.toBinaryString(n);

for(int i=1;i<s.length();i++){

if(s.charAt(i)=='0'){

System.out.print(4);

}else{

System.out.print(7);

}

}

System.out.println();

}

public static void main(String[] args) {

Scanner input=new Scanner(System.in);

while(input.hasNext()){

int n=input.nextInt();

int[] tem=new int[n];

for(int i=0;i<n;i++){

tem[i]=input.nextInt();

}

for(int j=0;j<n;j++){

Main.findLuckNum(tem[j]);

}

}

}

}