阶乘求和例题(高精度乘与和)

2020-10-18  本文已影响0人  优劣在于己

最近在洛谷上面看到一题,就想做个笔记,有关于高精度的题目

题目:求sum=1!+2!+3!+4!+...+n! (n<=50)

注意:用一般的c++方法肯定会超出精度,python自然不会(但是icpc与ccpc都不能用python呐),所以可以用python打表

python打表代码:


n=eval(input())

ans=0

d=1

for i in range(1,n+1):

  d*=i

  ans+=d

  print(ans)

思路:这题呢,就是每一位乘,然后再往前进

不采用打表的完整这题的c++代码如下:


#include

#include<cstring>

using namespace std;

int a[1000],b[1000],alen=1,blen=1,n;

int main(){

    cin>>n;

    memset(b,0,sizeof b);

    memset(a,0,sizeof a);

    a[1]=b[1]=1;

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

        int x=0;

        for(int j=1;j<=alen;j++){

            a[j]=a[j]*i+x;

            x=a[j]/10;

            a[j]%=10;

        }

        while(x){

            a[++alen]=x%10;

            x/=10;

        }

        if(blen<alen)blen=alen;

        for(int j=1;j<=blen;j++){

            b[j]=b[j]+a[j]+x;

            x=b[j]/10;

            b[j]%=10;

        }

        while(x){

            b[++blen]=x%10;

            x/=10;

        }

        for(int i=blen;i>0;i--)

            cout<<b[i];

        cout<<endl;

    }

    for(int i=blen;i>0;i--)

        cout<<b[i];

    cout<<endl;

    return 0;

}

上一篇 下一篇

猜你喜欢

热点阅读