#include <bits/stdc++.h>
using namespace std;
long long a,b;
long long ans[10],ans2[10];
long long k;
//代码有点丑,凑合着看看吧
int main()
{
long long i,m,n=1;
scanf("%lld%lld",&a,&b);
for(i=1;i<b;i*=10)
for(long long j=0;j<10;j++)
{
k=(j+1)*i-1;
if(k>b)break;
m=b-k;
ans[(j+1)%10]+=(m/(i*10))*i;
if(m%(i*10)!=0)
if(m%(i*10)>i)ans[(j+1)%10]+=i;
else ans[(j+1)%10]+=m%(i*10);
}
if(b%10==0)ans[1]++;
if(a!=1)
{
b=a-1;
for(i=1;i<b;i*=10)
for(long long j=0;j<10;j++)
{
k=(j+1)*i-1;
if(k>b)break;
m=b-k;
ans2[(j+1)%10]+=(m/(i*10))*i;
if(m%(i*10)!=0)
if(m%(i*10)>i)ans2[(j+1)%10]+=i;
else ans2[(j+1)%10]+=m%(i*10);
}
if(b%10==0)ans2[1]++;
if(a==2)ans2[1]++;
}
for(int k=0;k<10;k++)
printf("%d ",ans[k]-ans2[k]);
return 0;
}
按照小学奥数“页码问题”来的,
每10个数中有1个个位含这个数,
每100个数中有10十位个位含这个数,
每1000个数中有100百位个位含这个数,
以此类推—— 结果只有二十分。 (主要还是0的输出怪怪的)
如果dalao们能提供一些hack数据也行
不喜轻喷,违禁紫衫