1261 大数与常数的乘除

来源:互联网 发布:森海塞尔隔音效果 知乎 编辑:程序博客网 时间:2024/05/17 03:04
#include<iostream>#include<vector>#include<string>#include<algorithm>using namespace std;int num[27];vector<string>facs;string Divide(const string &str,int n){    int len=str.size()-1;    string s="";    int c=0,p=0;    for(int i=0;i<=len;i++){        c=p*10+str[i]-'0';        p=c%n;        c/=n;        if(c==0&&s.size()==0)continue;        else s+=(c+'0');    }    return s;}string Multiple(const string &str,int n){    int len=str.size()-1;    int c=0,p=0;    string s="";    for(int i=len;i>=0;i--){        c=(str[i]-'0')*n+p;        p=c/10;        c%=10;        s+=(c+'0');    }    while(p){        c=p%10;        p/=10;        s+=(c+'0');    }    reverse(s.begin(),s.end());//字符串倒置    return s;}void Calucate_Facs(){    facs.push_back("1");//0的阶乘    facs.push_back("1");//1的阶乘    facs.push_back("2");//2的阶乘    string tmp="2";    for(int i=3;i<=26*12;i++){        tmp=Multiple(tmp,i);        facs.push_back(tmp);    }}int main(){    Calucate_Facs();//一开始打表计算阶乘    int n;    while(~scanf("%d",&n)&&n){        string s="",str="";        int sum=0;        for(int i=0;i<n;i++){            scanf("%d",&num[i]);            sum+=num[i];        }        str=facs[sum];        for(int i=0;i<n;i++){            for(int j=2;j<=num[i];j++){                str=Divide(str,j);            }        }        cout<<str<<endl;    }    return 0;}

0 0
原创粉丝点击