题目描述
定义一个数字为幸运数字当且仅当它的所有数位都是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; }