hdu 1261(排列组合)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1261

思路:公式很好推,就是(n1+n2+n3+...nn)!/(n1!+n2!+...+nn!);

然后毫无疑问要用到大数计算...发现用string,vector还是挺方便的。。。

View Code
 1 #include<iostream>
 2 #include<vector>
 3 #include<string>
 4 #include<algorithm>
 5 using namespace std;
 6 int num[27];
 7 vector<string>facs;
 8 
 9 string Divide(const string &str,int n){
10     int len=str.size()-1;
11     string s="";
12     int c=0,p=0;
13     for(int i=0;i<=len;i++){
14         c=p*10+str[i]-'0';
15         p=c%n;
16         c/=n;
17         if(c==0&&s.size()==0)continue;
18         else s+=(c+'0');
19     }
20     return s;
21 }
22 
23 string Multiple(const string &str,int n){
24     int len=str.size()-1;
25     int c=0,p=0;
26     string s="";
27     for(int i=len;i>=0;i--){
28         c=(str[i]-'0')*n+p;
29         p=c/10;
30         c%=10;
31         s+=(c+'0');
32     }
33     while(p){
34         c=p%10;
35         p/=10;
36         s+=(c+'0');
37     }
38     reverse(s.begin(),s.end());//字符串倒置
39     return s;
40 }
41 
42 void Calucate_Facs(){
43     facs.push_back("1");//0的阶乘
44     facs.push_back("1");//1的阶乘
45     facs.push_back("2");//2的阶乘
46     string tmp="2";
47     for(int i=3;i<=26*12;i++){
48         tmp=Multiple(tmp,i);
49         facs.push_back(tmp);
50     }
51 }
52 
53 int main(){
54     Calucate_Facs();//一开始打表计算阶乘
55     int n;
56     while(~scanf("%d",&n)&&n){
57         string s="",str="";
58         int sum=0;
59         for(int i=0;i<n;i++){
60             scanf("%d",&num[i]);
61             sum+=num[i];
62         }
63         str=facs[sum];
64         for(int i=0;i<n;i++){
65             for(int j=2;j<=num[i];j++){
66                 str=Divide(str,j);
67             }
68         }
69         cout<<str<<endl;
70     }
71     return 0;
72 }

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值