京东2017校招:4,7幸运数

京东2017年校招编程题第一题,实现语言:java
算法思想,将4,7看成0,1,转换成2进制,令最高为标志位1,则从2开始,举例说明:
2(10) -> 4
3(11) ->7
4(100)->44
5(101)->47
6(111)->77

//第K个幸运数
//时间限制:C/C++语言 1000MS;其他语言 3000MS
//内存限制:C/C++语言 65536KB;其他语言 589824KB
//题目描述:
//4和7是两个幸运数字,我们定义,十进制表示中,每一位只有4和7两个数的正整数都是幸运数字。
//前几个幸运数字为:4,7,44,47,74,77,444,447... 
//现在输入一个数字K,输出第K个幸运数。
//输入
//第一行一个数字T(T<=1000)表示测试数据的组数。对于每组测试数据,输出一个数K
//输出
//每组数据输出一行,第K个幸运数。
//
//样例输入
//3
//5
//100
//1000000000
//
//样例输出
//74
//744747
//77477744774747744747444444447
import java.util.Scanner;
public class Main{
    public  static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        int rows=Integer.parseInt(scanner.nextLine());
        for(int p=rows;p>0;p--){
            Long input=Long.parseLong(scanner.nextLine());
            long num=2L;
            num+=input-1L;
            String val=solution(num);
            System.out.println(val);
        }
    }
    public static String solution(long n){
        String val=Long.toBinaryString(n);
        StringBuffer result=new StringBuffer();
        //0->4;1->7;舍弃最高位
        for(int bit=1;bitif(val.charAt(bit)=='0')
                result.append("4");
            else
                result.append("7");
        }
        return result.toString();
    }
}

你可能感兴趣的:(面试)