题意:
统计数字0-9的数量
思路:
找规律。详情见
51nod-1042 数字0-9的数量
#include <iostream>
#include <stdio.h>
using namespace std;
long long ans[10];
void solve(long long n,long long k,int op)
{
long long num=n;
long long cur=0;
long long last=0;
long long pre=0;
long long count=0;
long long i=1;
while(n/i!=0)
{
last=n%i;
pre=n/i/10;
cur=(n-pre*i*10-last)/i;
if (cur>k)
count+=(pre+1)*i;
else if(cur==k)
count+=pre*i+last+1;
else if(cur<k)
count+=pre*i;
i*=10;
}
if(k==0)
{
long long step=1;
while(num!=0)
{
count-=step;
step*=10;
num/=10;
}
}
if(op==0)
{
ans[k]=ans[k]-count;
}
else
{
ans[k]=ans[k]+count;
}
}
int main()
{
long long a,b;
while(cin>>a>>b)
{
if(a>b)
swap(a,b);
if(a==0&&b==0)
break;
for(int i=0; i<=9; i++)
{
ans[i]=0;
solve(a-1,i,0);
solve(b,i,1);
}
for(int i=0; i<=9; i++)
{
if(i!=0)
printf(" ");
cout<<ans[i];
}
cout<<endl;
}
return 0;
}