终于算清楚了
#include <iostream> #include <cstdio> #include <cmath> using namespace std; int s[10] = {0,1,20,300,4000,50000,600000,7000000,80000000,900000000}; int zero[10] = {0,10,110,1110,11110,111110,1111110,11111110,111111110}; int power[10] = {1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000}; int count(int n,int* a) { for(int i=0;i<10;i++) a[i] = 0; int cnt=0; int num[10]; if(!n) num[cnt++] = 0; while(n) { num[cnt++] = n%10; n/=10; } for(int i=0;i<cnt;i++) { if(!i) { for(int j=0;j<=num[0];j++) a[j]++; for(int j=i+1;j<cnt;j++) a[num[j]] += num[0]+1; continue; } for(int j=0;j<10;j++) { a[j] += s[i]*num[i]; } for(int j=0;j<num[i];j++) { a[j] += power[i]; } for(int j=i+1;j<cnt;j++) a[num[j]] += num[i]*power[i]; } a[0] -= zero[cnt-1]; } int main() { //freopen("input.txt","r",stdin); int A,B; while(scanf("%d%d",&A,&B)!=EOF && A || B) { int aa[10],bb[10]; count(A-1,aa);count(B,bb); printf("%d",bb[0]-aa[0]); for(int i=1;i<10;i++) { printf(" %d",bb[i]-aa[i]); } printf("\n"); } return 0; }