AcWing 338. 计数问题
原题链接
中等
作者:
Drifter
,
2021-01-10 23:13:36
,
所有人可见
,
阅读 246
寒假打卡
1.10 对的时间点
#include<iostream>
#include<algorithm>
#include<vector>
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;
}//get
int power10(int n)
{
int res=1;
while(n--) res*=10;
return res;
}//power10
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;
}//count
int main(void)
{
int a,b;
while(scanf("%d%d",&a,&b)&&(a||b))
{
if(a>b) swap(a,b);
for(int i=0;i<10;i++)
{
int res=count(b,i)-count(a-1,i);
printf("%d ",res);
}
printf("\n");
}
return 0;
}