幸运数字的定义是这样:仅含4和7且不比n小的数为n的幸运数字。
输入范围l,r要求输出这个范围内的数字的幸运数字之和。
代码:
1 #include<stdio.h> 2 #define N 1024 3 typedef long long ll; 4 ll a[N+1]; 5 ll f(ll n) 6 { 7 if(n==0) 8 return 0; 9 int i; 10 ll ans=0; 11 for(i=1;i<=N;i++) 12 { 13 if(a[i]<n) 14 ans+=a[i]*(a[i]-a[i-1]); 15 else{ 16 ans+=a[i]*(n-a[i-1]); 17 break; 18 } 19 } 20 return ans; 21 } 22 int main(void) 23 { 24 int l,r,i; 25 scanf("%d%d",&l,&r); 26 a[1]=4,a[2]=7; 27 int t=3; 28 for(i=1;i<=511;i++) 29 { 30 a[t++]=a[i]*10+4; 31 a[t++]=a[i]*10+7; 32 } 33 printf("%I64d\n",f(r)-f(l-1)); 34 return 0; 35 }
其实可以先把10^10以内的幸运数字存进数组,然后分别计算l-1,r,以内的数字的幸运数字的和,两者相减即为最终结果。