本来是一道水题,可是最后wa了,找原因找不到,感觉自己写的也没错啊,可是上网搜此题的解题思路,大家都提到了数位DP,第一次接触这个词汇,顿时心生凉意,一道水题也要从新学习新的知识点,最终还是按着自己的思路来,最终找到了错误的原因,是因为自己的细节没有处理好。
求一段区间的问题,可以考虑是否能用数组来解决。
最后求区间用数组做差的时候应该减去区间的前一位,结果简单的想减去区间然后加1,这个错误困扰了一上午。晕。。。
#include<stdio.h>
int num[1000002];
int main()
{
num[0]=1;
for(int i=1; i<1000001; i++)
{
int flag=0;
int f=0;
int a=i;
while(a)
{
int z=a%10;
a/=10;
if(z==4)
{
flag=1;
break;
}
else if(z==2)
f=1;
else if(z==6&&f==1)
{
flag=1;
break;
}
else
f=0;
}
if(flag==0)
num[i]=num[i-1]+1;
else
num[i]=num[i-1];
}
int n,m;
while(scanf("%d%d",&n,&m),n+m)
{
printf("%d\n",num[m]-num[n-1]);
}
return 0;
}