第K个幸运数(京东2017秋招真题)

Posted lick468

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第K个幸运数(京东2017秋招真题)相关的知识,希望对你有一定的参考价值。

题目

4和7是两个幸运数字,我们定义,十进制表示中,每一位只有4和7两个数的正整数都是幸运数字。前几个幸运数字为:4,7,44,47,74,77,444,447...
现在输入一个数字K,输出第K个幸运数。

输入

第一行一个数字T(T<=1000)表示测试数据的组数。对于每组测试数据,输出一个数K(1 <= K <= 100000000000000000000000000)

思路

只有四和7,而且还和顺序有关,4,7,44,47,74,77 ,不免想到二进制0,1,00,01,10,11
然后就是找对应数字的二进制和4,7的关系了。通过%2余数可知,不是0就是1,极其符合不是4就是7。
最终通过计算发现(参考别人代码),对应数字+1之后的数字,除去最高位之外的二进制就是所要求的。
技术图片

代码

import java.util.Scanner;

public class Main 

    public static void main(String[] args) 
        Scanner in = new Scanner(System.in);
        while(in.hasNext()) 
            int n = in.nextInt();
            Long[] arr = new Long[n];
            // 输入数据
            for(int i=0;i<n;i++) 
                arr[i] = in.nextLong()+1;
            
            // 输出计算的结果
            for(int i=0;i<n;i++) 
                String result = getArrays(arr[i]);
                StringBuilder builder = new StringBuilder();
                char[] chars = result.toCharArray();
                for(int j = 1;j<chars.length;j++) 
                    if(chars[j] == '0') 
                        builder.append('4');
                    else 
                        builder.append('7');
                    
                
                System.out.println(builder.toString());
            
        
    
    public static String getArrays(Long num) 
        StringBuilder builder = new StringBuilder();
        while(num != 0) 
            builder.append(num%2);
            num = num/2;
        
        return builder.reverse().toString();
    


运行结果

技术图片

题目链接及答案链接

https://exercise.acmcoder.com/online/online_judge_ques?ques_id=3376&konwledgeId=41

以上是关于第K个幸运数(京东2017秋招真题)的主要内容,如果未能解决你的问题,请参考以下文章

京东笔试

2017校招真题在线编程-幸运的袋子

集合(京东2017秋招真题)

[入门组模拟赛]幸运数与排列

集合(京东2017秋招真题)

采购单(京东2017秋招真题)