计算0-9每一个数字出现的次数 逐位进行处理 对于每一位取几时依次算下组合的情况 注意0的情况需要特殊处理一下 因为0000 00 这样都是等于0的 前面的几位是多余的
1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<stdlib.h> 6 #include<vector> 7 #include<cmath> 8 #include<queue> 9 #include<set> 10 using namespace std; 11 #define N 100000 12 #define LL long long 13 #define INF 0xfffffff 14 const double eps = 1e-8; 15 const double pi = acos(-1.0); 16 const double inf = ~0u>>2; 17 int d[12],dd[12]; 18 int an[12]; 19 void judge(int xx,int x[],int f) 20 { 21 if(!xx) return ; 22 int i,j,e; 23 int p[12],g=0; 24 int y = xx; 25 while(xx) 26 { 27 p[++g] = xx%10; 28 xx/=10; 29 } 30 int o = 1; 31 x[0]+=1; 32 for(i = g ; i >= 1 ; i--) 33 { 34 for(i==g?j = 1:j=0 ; j < p[i] ; j++) 35 { 36 x[j]+=pow(10.0,g-o); 37 } 38 for(j = i-1 ; j>=1 ; j--) 39 { 40 int ko; 41 if(i==g) 42 { 43 if(j==i-1) 44 ko = pow(10.0,g-o-1)*(p[i]-1); 45 else 46 ko = pow(10.0,g-o-1)*(p[i]-1)+(pow(10.0,(i-j-1))-1)*pow(10.0,j-1); 47 } 48 else ko = pow(10.0,g-o-1)*p[i]; 49 //cout<<ko<<" "<<i<<" "<<j<<" "<<o<<endl; 50 x[0]+=ko; 51 for(e = 1 ; e <= 9 ; e++) 52 { 53 x[e]+=pow(10.0,g-o-1)*p[i]; 54 } 55 } 56 int k = pow(10.0,g-o); 57 x[p[i]] += y%k+1; 58 o++; 59 } 60 61 if(f) 62 { 63 for(i = 1 ;i <= g ;i++) 64 x[p[i]]--; 65 } 66 } 67 int main() 68 { 69 int i,a,b; 70 while(cin>>a>>b) 71 { 72 if(!a&&!b) break; 73 if(a>b) swap(a,b); 74 memset(d,0,sizeof(d)); 75 memset(dd,0,sizeof(dd)); 76 judge(a,d,1); 77 judge(b,dd,0); 78 for(i = 0 ;i < 9 ;i++) 79 cout<<dd[i]-d[i]<<" "; 80 cout<<dd[9]-d[9]<<endl; 81 } 82 return 0; 83 }