http://poj.org/problem?id=3286
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<ctime>
#include<queue>
#include<cstring>
#include<set>
#include<cmath>
#include<algorithm>
#define LL long long
using namespace std;
LL Fsum(LL x)
{
if(x==-1)
return 0;
if(x<10)
return 1;
LL sum=x/10+1;//末位为0的情况
for(LL i=10;i*10<=x;i=i*10)//依次向高位排查
{
if(x/i%10!=0)
{
sum+=(i)*(x/i/10);//此位为非0 它变成0后 它前可以有i 种情况这样后面有 x/i/10 种情况 都比它小
}else
{
sum+=(x/i/10-1)*i+(x%i)+1;//此为为0 比较特殊的是当后面达到最大时 前面的情况数量变了
}
}
//cout<<sum<<endl;
return (sum);
}
int main()
{
//freopen("data.txt","r",stdin);
LL a,b;
while(cin>>a>>b)
{
if(a==-1&&b==-1)
break;
cout<<(Fsum(b)-Fsum(a-1))<<endl;;
}
return 0;
}
浙公网安备 33010602011771号