思路:平均数思想
由于每个数出现在各个位的次数是一样的,
所以ans=每个位的平均数*排列数*n个1
如1 1 2 2 ans=((1+1+2+2)/4) * (A(4,4)/(A(2,2)*A(2,2)))*1111
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const long long a[13]={0,1,11,111,1111,11111,111111,1111111,11111111,111111111,1111111111,11111111111,111111111111};
long long fac[13];
int main(){
int n;
int all,num;
long long ans;
int b[10];
fac[0]=1;
for(int i=1;i<=12;i++){
fac[i]=i*fac[i-1];//把每个数阶乘的结果存到数组里
}
while(cin>>n&&n!=0){
all=0;
memset(b,0,sizeof(b));
for(int i=0;i<n;i++){
cin>>num;
all=all+num;
b[num]++;//b[num]表示num的数有几个,num为0到9
}
ans=fac[n-1]*all;
for(int i=0;i<10;++i){
ans/=fac[b[i]];
}
cout<<(unsigned long long)ans*a[n]<<endl;
}
return 0;
}