思路
看到楼上有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;
} 
京公网安备 11010502036488号