zoukankan      html  css  js  c++  java
  • 第K个幸运数字(4、7)

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

    思路是:
    将4换成0,7换成1,那么
    4, 7, 44, 47, 74, 77, 444, 447... 变成了
    0, 1, 00, 01, 10, 11, 000, 001...对应的十进制是:
    0, 1, 0, 1, 2, 3, 0, 1...看着没什么规律啊,不好处理,关键的问题在于00,01,000等都因为前边是0失去了本身的大小,那么如果我们在前面都加个1呢?
    10, 11, 100, 101, 110, 111, 1000, 1001...变成十进制:
    2, 3, 4, 5, 6, 7, 8, 9...

    规律出来了。

    我要求第K个数字,那么反向推不就得了。
    先把K变成二进制(K+1的二进制),然后去掉最前面的1,然后将0替换为4,将1替换为7。答案就出来了。

    代码如下:

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    ll a[1000];
    
    ll f(ll n){
        n+=1;
        int b[1000];
        int i,j=0;
        
        while(n){
            b[j++]=n%2;
            n/=2;
            
        }
        for(i=j-2;i>=0;i--){
            if(b[i]==0)
            cout<<'4';
            else if(b[i]==1)
            cout<<'7';
        
    
        }
    }
    int main(){
        ll t;
        cin>>t;
        for(int k=0;k<t;k++){
            cin>>a[k];
            f(a[k]);
            cout<<endl;
        }
        
        return 0;
    }
  • 相关阅读:
    HashMap实现原理
    设计模式-2-代理模式
    设计模式-1-单例模式
    重构技巧
    unable to create new native thread
    设计模式-6大原则
    阿里前端在线编程题
    如何实现用户懒加载?
    《我敢活成我想要的样子》读后感
    改bug心得
  • 原文地址:https://www.cnblogs.com/hcw110/p/10555933.html
Copyright © 2011-2022 走看看