阶乘和

阶乘和

链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1173


时间限制: 1000 ms         内存限制: 65536 KB

【题目描述】

用高精度计算出S=1!+2!+3!+…+n!(n≤50),其中“!”表示阶乘,例如:5!=5*4*3*2*1。

输入正整数N,输出计算结果S。

 

【输入】

一个正整数N。

【输出】

计算结果S。

【输入样例】

5

【输出样例】

153
题解:求阶乘+高精度算法
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

const int maxn=5e4+5;
int a[maxn],c[maxn];
int main(){
    int n,x=1,l=0,k=0,L=0;
    c[0]=1;
    cin>>n;
    while(x<=n){
        k=0;
        for(int i=0;i<=l;i++){
            c[i]=k+c[i]*x;
            k=c[i]/10;
            c[i]%=10;
            if(k>0&&i>=l)l++;
    
        }    
        x++;
        L=max(L,l);
        for(int i=0;i<=L;i++)
            if((a[i]=c[i]+a[i])>=10)
            {
                a[i+1]++;a[i]-=10;
            }
                
            
    }
    for(int i=l;i>=0;i--)cout<<a[i];
    cout<<endl;
    return 0;
} 
原文地址:https://www.cnblogs.com/EdSheeran/p/7530630.html