牛客网---辛运数字2

题目描述 

定义一个数字为幸运数字当且仅当它的所有数位都是4或者7。
比如说,47、744、4都是幸运数字而5、17、467都不是。
定义next(x)为大于等于x的第一个幸运数字。给定l,r,请求出next(l) + next(l + 1) + ... + next(r - 1) + next(r)。

输入描述:

两个整数l和r (1 <= l <= r <= 1000,000,000)。

输出描述:

一个数字表示答案。
示例1

输入

2 7

输出

33
示例2

输入

7  7

输出
7

#include<cstdio>
#include<algorithm>
using namespace std;
long long num[3000];
int cnt;
void dfs(long long s){

     if(s>4444444444ll)
     return;
     num[cnt++]=s;
     dfs(s*10+4);
     dfs(s*10+7);
}
int main(){
    long long l,r,sum=0;
    int j=1;
    cnt=0;
    dfs(0);
    sort(num,num+cnt);
//    for(int i=1;i<=10;i++){
//        printf("%lld ",num[i]);
//    }
    scanf("%lld %lld",&l,&r);
    for(long long i=l;i<=r;){
        if(i<=num[j]&&num[j]<=r){
            sum+=num[j]*(num[j]-i+1);
            i=num[j]+1;
            j++;
        }
        else if(i<=num[j]&&num[j]>r){
        sum+=num[j]*(r-i+1);
        i=r+1;
        }else{
            j++;

        }
    }
    printf("%lld\n",sum);
    return EXIT_SUCCESS;
}


猜你喜欢

转载自blog.csdn.net/kangyan__/article/details/79592295