#include<stdio.h> #define maxn 1000010 int f[maxn]; int weishu(int a) { int b=1; while(1) { if(a/10 == 0) break; else { a/=10; b++; } } return b; } //此函数用于输出参数是几位 记录位数是为了下面方便标记不吉利的数 int fun(int x,int n) //此处n是位数 x是要判断的数 { int flag=0; for(; n>0; n--) { if(x%10==4||x%100==62) { flag=1; break; } else x/=10; } return flag; } //此函数用于将所有含有4或者62 的数字标记为 1 int main() { int n,m,i,j,wei; for(i=4; i<maxn; i++) { wei=weishu(i); f[i]=fun(i,wei); } // 记录范围内不要的数 这里是打表用数组储存不要的数 避免数据过多超时 while(~scanf("%d %d",&n,&m)&&n||m) { int ans=0; for(j=n; j<=m; j++) if(f[j]) ans++; printf("%d\n",m-n-ans+1); } return 0; }
题目总结:
1、多数据重复处理问题 要记得使用自定义函数方便处理数据
2、学习用数据记录储存数据
3、此题考虑位数是关键