題目描述
定義一個數字爲幸運數字當且僅當它的所有數位都是4或者7。
比如說,47、744、4都是幸運數字而5、17、467都不是。
定義next(x)爲大於等於x的第一個幸運數字。給定l,r,請求出next(l) + next(l + 1) + ... + next(r - 1) + next(r)。
比如說,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;
}