按位统计,从后向前分别递归处理每一位。
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
long long a,b,cnt;
void slove(long long a,long long d,long long d1,long long k)
{
if(a<0) return;
long long t;
for(t=a;;t--)
{
long long p=t;
while(p)
{
if(p%10==0) cnt+=k;
p/=10;
}
if(t>0)cnt+=d;
else cnt+=d1;
if(t%10==0)
{
t=t/10-1; break;
}
}
slove(t,d*10+k,d*9+d1,k*10);
}
int main()
{
// freopen("test.txt","r",stdin);
while(scanf("%lld%lld",&a,&b)&&a!=-1)
{
long long A,B;
cnt=0;slove(a-1,0,1,1);A=cnt;
cnt=0;slove(b,0,1,1);B=cnt;
printf("%lld\n",B-A);
}
return 0;
}