#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、此题考虑位数是关键