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;
    }
  • 相关阅读:
    线程与进程
    Java集合框架体系JCF
    Java异常
    抽象,接口和Object类
    Java三大特性
    面向对象
    数组
    Java 控制结构与方法
    数据类型与变量
    Java基础之入门
  • 原文地址:https://www.cnblogs.com/hcw110/p/10555933.html
Copyright © 2011-2022 走看看