思路
看到楼上有dp做法的,原谅我难以看懂,我是直接暴力过的。
前缀和可以O(1)得到答案,只需要进行预处理求1~1e6讨厌的数个数就好了。O(1e6)
判断一个数是否讨厌,可以对其每一位模4,每两位模38.
代码
#include<bits/stdc++.h> using namespace std; int n,m,sum[1000005]; bool check(int x){ while(x){ if(x%10==4||x%100==38) return true; x/=10; } return false; } int main(){ sum[0]=0; for(int i=1;i<=1000000;i++){ sum[i]=sum[i-1]+check(i); } scanf("%d%d",&n,&m); while(n!=0||m!=0){ cout<<sum[m]-sum[n-1]<<endl; scanf("%d%d",&n,&m); } return 0; }