京东笔试 幸运数 还有更好的解法吗?但提交通过0%,哪里有错

import java.io.*;
import java.util.*;
class Test {
}
public class Main
{
    public static void main(String args[])
    {
        Scanner cin = new Scanner(System.in);
        int tt = cin.nextInt();
        int j = 0;
        int k;
        for(j = 1;j<=tt;j++)
        {
        	
           k = cin.nextInt();
            if(k <= 0){
            	
            }
            //简单处理特殊情况
            if(k == 1){
    			System.out.println(4);
    		}else if(k == 2){
    			System.out.println(7);
    		}else{

    			int t = k+1;//把k+1,然后直接转换成二进制
    			char[] chars =  Integer.toBinaryString(t).toCharArray();
    			char[] str = new char[chars.length-1];//由于输出是大数,使用字符数组存储
    			
    			int i;
                        //算法核心,除了第一个外,0对应4,1对应7.
    			for(i=1;i<chars.length;i++){
    				if(chars[i] == '0'){    				
    					str[i-1] = '4';
    				}else{    		   					
    					str[i-1] = '7';
    				}
    			}
	
                        //输出
    			for(i=0;i<str.length;i++){
    				System.out.print(str[i]);
    			}
    			System.out.println();
    		
    		}
            
        }
    }
}

/*
本地输入
3
5
100
1000000000

输出:
74
744747
77477744774747744747444444447

*/

#京东#
全部评论
static String luckNumber(int n) { if (n < 1) return ""; if (n == 1) return "4"; if (n == 2) return "7"; Queue<String> queue = new LinkedList<>(); queue.offer("4"); queue.offer("7"); int pollTime = (n - 1) / 2; for (int i = 0; i < pollTime; i++) { String s = queue.poll(); queue.offer(s + "4"); queue.offer(s + "7"); } String pos = queue.poll(); String pre = pos; while (!queue.isEmpty()) { pre = pos; pos = queue.poll(); } return n % 2 == 0 ? pos : pre; }
点赞 回复 分享
发布于 2016-09-07 10:55
目测多输出一回车
点赞 回复 分享
发布于 2016-09-07 02:33
这题就是腾讯格雷码那一题的简化版,递归加4,加7
点赞 回复 分享
发布于 2016-09-06 10:07
http://blog.tk-xiong.com/archives/956
点赞 回复 分享
发布于 2016-09-06 10:03
提前把所有的结果算好不行吗。。。 不要每次都计算一遍 1的幸运数的个数是1 5也是1 那么1-5所有的数字共用1,如果每次都计算,会有很多计算过程重复
点赞 回复 分享
发布于 2016-09-06 00:34
帮别人写了 都过了 import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class Test { public static Map<Integer, Integer> map=new HashMap<Integer, Integer>(); public static void main(String []args){ Scanner scanner=new Scanner(System.in); int num=scanner.nextInt(); for(int i=0;i<num;i++){ int n=scanner.nextInt(); int temp=find(map,n); int result=1; if (temp!=1) { result=map.get(temp); } for(int i1=temp+1;i1<=n;i1++){ if (f(i1)==g(i1)) { result++; } } map.put(n, result); System.out.println(result); } } private static int find(Map<Integer, Integer> map2,int n) { for(int i=n;i>=1;i--){ if (map.get(Integer.valueOf(i))!=null) { return i; } } return 1; } public static int f(int x){ int m=0; while(x>0){ m=m+x%10; x=x/10; } return m; } public static int g(int x){ int m=0; while(x>0){ m=m+x%2; x=x/2; } return m; } }
点赞 回复 分享
发布于 2016-09-05 23:41
交卷后改好的,不知道能不能AC。。感觉没什么问题,唉。。 #include <iostream> #include <stack> using namespace std; int main(){ char NUM[] = {'4', '7'}; int T; cin>>T; for (int t = 0; t < T; t++){ int K; stack<int> stk; cin>>K; K++; while (K){ stk.push(K % 2); K /= 2; } stk.pop(); while (!stk.empty()){ cout<<NUM[stk.top()]; stk.pop(); } cout<<endl; } return 0; }
点赞 回复 分享
发布于 2016-09-05 23:08
有规律的,44 47 74 77, 后面一直重复这几个数
点赞 回复 分享
发布于 2016-09-05 22:46

相关推荐

认真搞学习:这个真喷不了,你是我见过最美的牛客女孩
点赞 评论 收藏
分享
05-12 16:04
已编辑
江西财经大学 Java
点赞 评论 收藏
分享
MGlory:我当初有一个老师告诉我简历要写的简单,最好只一面,项目可以写核心的,进面了自然会问你的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务