![]()
1 #include<iostream>
2 #include<vector>
3 #include<algorithm>
4 using namespace std;
5
6 int cnk(int n, int k)
7 {
8 int a,b;
9 a=b=1;
10 for(int i=0; i<k; i++)
11 {
12 a *= n--;
13 b *= (i+1);
14 }
15
16 return a/b;
17 }
18
19 int arrange_calculate(int *a)
20 {
21 int n=0;
22 int ans=1;
23 for(int i=1; i<10; i++)
24 n += a[i];
25
26 for(int i=1; i<10; i++)
27 if(a[i]>0)
28 {
29 ans *= cnk(n, a[i]);
30 n -= a[i];
31 }
32 return ans;
33 }
34
35 int main()
36 {
37 int T,N;
38 cin>>T;
39 for(int i=0; i<T; i++)
40 {
41 cin>>N;
42 int a[10]={0}; //记录N中1-9出现的次数
43 int total=0; //记录N的各个位上的数之和
44 int count=0; //保存N有多少位,1表示个位,2表示十位,3表示百位,以此类推
45 while(N)
46 {
47 int temp = N%10;
48 total += temp;
49 a[temp]++;
50 N /=10;
51 count++;
52 }
53 int arrangeNum = arrange_calculate(a);
54
55 int s=0;
56 for(int j=0; j<count; j++)
57 {
58 s += total;
59 total *= 10;
60 }
61
62 int ans;
63 if(arrangeNum<count) //此时输入的N一定是22222这种各个位上的数都相同的这种类型的数
64 ans = s/count;
65 else
66 ans = (int)(s * (arrangeNum*1.0/count)); //arrangeNum不一定是count的整数倍,比如2233对应的count=4,arrangeNum=6
67
68 cout<<ans<<endl;
69
70
71 }
72 return 0;
73 }