总结了一些大数计算,未完待续。。。

//加法

string add(string num_1,string num_2){

    string re;

    int length_1=(int)num_1.size();

    int length_2=(int)num_2.size();

    int length=max(length_1, length_2);

    if(length_1<length_2)

        for(int i=0;i<length_2-length_1;i++)

            num_1="0"+num_1;

    else

        for(int i=0;i<length_1-length_2;i++)

            num_2="0"+num_2;

    int temp;

    int carry=0;

    for(int i=length-1;i>=0;i--){

        temp=num_1[i]-'0'+num_2[i]-'0'+carry;

        carry=temp/10;

        temp%=10;

        re=char(temp+'0')+re;

    }

    if(carry>0)

        re=char(carry+'0')+re;

    return re;

}


//乘法

string multiply(string num_1,string num_2){

    string re;

    int length_1=(int)num_1.size();

    int length_2=(int)num_2.size();

    for(int i=length_2-1;i>=0;i--){

        string temp;

        int num=num_2[i]-'0';

        int carry=0;

        if(num){

            for(int j=0;j<length_2-i-1;j++)

                temp+="0";

            for(int j=length_1-1;j>=0;j--){

                int k=( num*(num_1[j]-'0') + carry)%10;

                carry=( num*(num_1[j]-'0') + carry)/10;

                temp=char(k+'0')+temp;

            }

            if(carry)

                temp=char(carry+'0')+temp;

        }

        re=add(re, temp);

    }

    re.erase(0,re.find_first_not_of('0'));

    if(re.empty())

        re="0";

    return re;

}


//阶乘

void factorial(int n){

    int a[maxn];

    a[0]=1;

    int dig=1;

    int temp;

    for(int i=2;i<=n;i++){

        int num=0;

        for(int j=0;j<dig;j++){

            temp=a[j]*i+num;

            a[j]=temp%10;

            num=temp/10;

        }

        while(num){

            a[dig]=num%10;

            num/=10;

            dig++;

        }

    }

    for(int i=dig-1;i>=0;i--)

        printf("%d",a[i]);

    cout<<endl;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JiangNanMax

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值