开始想得比较复杂,结果理不清思路,后来发现可以直接打表,然后就过了。
#include <cstdio>
#define MAX 50000 + 2
int a[MAX];
bool f(int n){
while(n){
if(n % 10 == 4) return 1;
n /= 10;
}
return 0;
}
int main(){
int n;
for(n = 1; n != MAX; ++n)
if(f(n)) a[n] = a[n - 1];
else a[n] += a[n - 1] + 1;
while(scanf("%d", &n) == 1)
printf("%d\n", a[n]);
return 0;
}