1214~~~幸运数字4&7



1214: 幸运数字


Description
4和7是幸运数字,仅由他们构成的数字也是幸运数字。请告诉我第K 个幸运的正整数。

Input
首先是输入测试用例的组数,每组组成如下:一个正整数K (1<= K<= 10 9).

Output
每行针对每组测试用例输出第K 个幸运的正整数。

Sample Input
3
1
2
3
Sample Output
4
7
44
这题的意思简洁明了,就是让你求出第n位4和7组成的数;
自己打一下草稿就能看出规律
1     4
2     7      2
3    44
4    47
5    74
6    77       4
7   444
8   447
9   474
10  477
11  744
12  747
13  774
14  777      8
。。。。。。。。。。。。。。。
从仅写的这几行就能看出规律,第一位个位数,他的周期是2,数字是4 7
第二位十位,他的周期是4,数字是4 4 7 7
第三位百位,他的周期是8,数字是4 4 4 4 7 7 7 7
~~~~~~~~~~~~~~~~~~~~~~
依次类推。。。(而且每个周期的前半部分是4,后半部分是7,我们可以通过取模的办法来实现)
假设我们要求第十位幸运数
输入10
首先我们就能求出个位数   10%(2^1)=0~~~~~~~~~~~为7
然后十位数   (第二位数是从第三个数才开始有的)所以(10-2)%(2^2)=0~~~~~~为7
然后百位数    (第三位数是从第七个数开始有的)所以(10-2-4)%(2^3)=4~~~~~~为4
找到规律之后一切都是so easy
#include<iostream>
#include<cmath>
using namespace std;
int s[100];
int main()
{
    int t,m,i,j,c,f,d;
    cin>>t;
    while(t--)
    {
        int sum=0;
        cin>>m;
        for(i=1;sum<m; i++)
        {
            f=(int)pow((double)2,(double)i);
            sum+=f;
            d=sum-f;
            c=m-d;
            if(c%f<=f/2&&c%f!=0)
                s[i]=4;
            else
                s[i]=7;
        }
        for(j=i-1;j>=1;j--)
            cout<<s[j];
        cout<<endl;
    }
    return 0;
}
微笑
    
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值