zzuli 1661--0的个数

#include<stdio.h>
typedef __int64 lint;
lint jie[]={1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000,10000000000};
lint count(lint n)
{
	int i;
	lint sum=0,left,m;
	for(i=1;i<11;i++)
	{
		left=n/jie[i]-1;//没有算最大的那个
		sum+=left*jie[i-1];
		m=(n%jie[i]-n%jie[i-1])/jie[i-1];
		if(m>0)//若大于他,前边的可以都算上
			sum+=jie[i-1];
		else if(m==0) sum+=n%jie[i-1]+1;//否则,有几个算几个,+1是因为000的情况
		if(n<jie[i])
			return sum;
	}
}
int main()
{
	int t;
	lint a,b;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%I64d%I64d",&a,&b);
		printf("%I64d\n",count(b)-count(a-1));
	}
}


你可能感兴趣的:(zzuli 1661--0的个数)