#include<bits/stdc++.h>
using namespace std;
int get(vector<int> num,int l,int r)
{
int res=0;
for(int i=l;i>=r;i--)
{
res=res*10+num[i];
}
return res;
}
int power10(int x)
{
int res=1;
while(x--)
{
res*=10;
}
return res;
}
int count(int n,int x)
{
if(!n) return 0;
vector<int> num;
while(n)
{
num.push_back(n%10);
n/=10;
}
n=num.size();
int res=0;
for(int i=n-1-!x;i>=0;i--)
{
if(i<n-1)
{
res+=get(num,n-1,i+1)*power10(i);
if(!x)
{
res-=power10(i);
}
}
if(num[i]==x)
{
res+=get(num,i-1,0)+1;
}
else if(num[i]>x)
{
res+=power10(i);
}
}
return res;
}
int main()
{
int a,b;
while(cin>>a>>b,a)
{
if(a>b) swap(a,b);
for(int i=0;i<=9;i++)
{
cout<<count(b,i)-count(a-1,i)<<" ";
}
puts("");
}
return 0;
}
分几种情况来进行讨论
以我们要寻找的数字作为分界点,把数字分成两个部分,前面部分可以比较小,前面部分小的话,后面部分可以随便选择
前面部分相等的话,后面部分最大和原来数字相等
power10表示的意思是随便选择的情况数目,比如说有一位可以随便选择就是10,2位就是100,3位就是1000
还有一些细节我还没有想清楚