题意:
给出n,求1~n中出现0~9的数字
#include <iostream>
#include <cstring>
using namespace std;
typedef long long ll;
ll a[10]={0};
void fid(ll n,ll m){
// m代表当前位
ll x = n%10; // 低位
ll y = n/10; //高位
for(int i=0;i<=x;i++){
a[i]+=m; //当前位对地位的影响
}
for(int i=0;i<=9;i++){
a[i]+=m*y ; //当前位高位的影响
}
// 去除前导0
a[0] -= m;
// 高位对地位的影响
ll t = y;
while(t){
a[t%10]+= (x+1)*m; //加上0
t/=10;
}
if(y) fid(y-1,m*10);
}
int main(){
ll n;
while(cin>>n){
memset(a,0,sizeof(a));
fid(n,1);
for(int i=0;i<=9;i++){
cout<<a[i]<<endl;
}
}
return 0;
}