链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089
数位dp经典入门题,这里给出一种简单做法。
#include<bits/stdc++.h>
typedef long long ll;
typedef long double ld;
#define INF 0x3f3f3f3f
#define MOD 1e+6
int main(){
int n, m, ans;
int i, j;
while(scanf("%d %d", &n, &m) && n && m){
ans = 0;
for(i = n; i <= m; ++i){
int tmp = i;
while(tmp){
if(tmp % 10 == 4){
ans++;
break;
}
if(tmp % 100 == 62){
ans++;
break;
}
tmp /= 10;
}
}
printf("%d\n", m-n+1-ans);
}
return 0;
}
注意点:只能记录非吉利数的个数,最后再相减得到答案(m-n+1-ans), 直接计数会超时,因为非吉利数要比吉利数要少得多,执行次数也就少的多。(要直接计算的话,要打表预处理)