大数阶乘

N的阶乘

http://www.nowcoder.com/questionTerminal/f54d8e6de61e4efb8cce3eebfd0e0daa

大数乘法和大数加法,
按照乘法和加法的运算对字符串进行运算就可以了,可以把代码记下来当成板子用。
这样下次写时候直接用就行了。

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
//大数加法
string addString(string a,string b)
{
    int carry=0;
    string res;
    int i=a.size()-1;
    int j=b.size()-1;
    while(i>=0 && j>=0)
    {
        int num=carry+a[i]-'0'+b[j]-'0';
        res+=num%10+'0';
        carry=num/10;
        i--;j--;    
    }
    while(i>=0)
    {
        int num=carry+a[i]-'0';
        res+=num%10+'0';
        carry=num/10;
        i--;
    }
    while(j>=0)
    {
        int num=carry+b[j]-'0';
        res+=num%10+'0';
        carry=num/10;
        j--;
    }    
    if(carry>0)
        res+=to_string(carry);
    reverse(res.begin(),res.end());
    return res;
} 
//大数乘法(x<=10)
string mulString(string a,int x)
{
    int carry=0;
    string res;
    for(int i=a.size()-1;i>=0;i--)
    {
        int num=carry+(a[i]-'0')*x;
        res+=num%10+'0';
        carry=num/10;
    }
    if(carry>0)
        res+=to_string(carry);
    reverse(res.begin(),res.end());
    return res;
} 
//组合大数乘法
string MulString(string a,string b) 
{
    string res;
    for(int i=0;i<b.size();i++)
    {
        int x=b[b.size()-1-i]-'0';
        string num=mulString(a,x);
        for(int j=0;j<i;j++)
            num=mulString(num,10);
        res=addString(res,num);
    }
    return res;
}
int main()
{
    int n;
    while(cin>>n)
    {
        string res="1";
        for(int i=2;i<=n;i++)
        {
            res=MulString(res,to_string(i));
        }
        cout<<res<<endl;
    }
    return 0;
}
全部评论
谢谢大佬,参考了许多
点赞 回复 分享
发布于 2021-02-08 22:40

相关推荐

10-24 13:36
门头沟学院 Java
Zzzzoooo:更新:今天下午有hr联系我去不去客户端,拒了
点赞 评论 收藏
分享
拒绝无效加班的小师弟很中意你:求职意向没有,年龄、课程冗余信息可以删掉,需要提升项目经历。排版需要修改。
点赞 评论 收藏
分享
11-27 17:35
已编辑
蚌埠坦克学院 C++
深信服 后台开发 n×12
点赞 评论 收藏
分享
评论
41
4
分享
牛客网
牛客企业服务