题意:计算从[a,b]期间中总共有多少个0。
思路:比如1234,我们计算1到1234总共出现了多少个0,。
当个位有0的时候,出现了123次
当十位有0的时候,出现了12*10次
当百位有0的时候,出现了1*100次
思路:比如1234,我们计算1到1234总共出现了多少个0,。
当个位有0的时候,出现了123次
当十位有0的时候,出现了12*10次
当百位有0的时候,出现了1*100次
但是若为1204,在计算十位0的个数的时候,是11*10+5,因为当前面是12的时候,最后一位只能取0-4,刚好5个
#include<iostream>
#include<cstdio>
#include<math.h>
#include<string.h>
using namespace std;
typedef long long LL;
LL a[20];
LL gets(LL n)
{
if(n<0) return 0;
LL res=1,pre,aft,now;
for(int i=1;i;i++)
{
if(a[i]>n) break;
pre=n/a[i];
aft=n%a[i-1];
now=(n%a[i]-aft)/a[i-1];
if(now) res+=pre*a[i-1];
else res+=(pre-1)*a[i-1]+aft+1;
}
return res;
}
int main()
{
LL n,m,res;
a[0]=1;
for(int i=1;i<=15;i++)
a[i]=a[i-1]*10;
while(scanf("%lld%lld",&m,&n)&&!(n==-1&&m==-1))
{
res=gets(n);
res-=gets(m-1);
printf("%lld\n",res);
}
return 0;
}