洛谷 P1009 阶乘之和

题目描述

用高精度计算出S=1!+2!+3!+…+n!(n≤50)

其中“!”表示阶乘,例如:5!=5*4*3*2*1。

输入输出格式

输入格式:

 

一个正整数N。

 

输出格式:

 

一个正整数S,表示计算结果。

 

输入输出样例

输入样例#1:
3
输出样例#1:
9
高精度
屠龙宝刀 点击就送
#include <iostream>

using namespace std;

int str[201],l=1,n,i,j,s[201];
void xj()
{
    for(int i=1;i<=l;++i)
    {
        str[i]+=s[i];
        if(str[i]>=10)
        {
            str[i+1]+=str[i]/10;
            str[i]%=10;
        }
    }
}
int main()
{
    s[1]=1;
    str[1]=1;
    cin>>n;
    int t=0;
    for(i=2;i<=n;++i)
    {
        t=0;
        for(j=1;j<=l;++j)
        {
            s[j]*=i;
            s[j]+=t; 
            if(s[j]>=10)
            {
                t=s[j]/10;
                s[j]%=10;
                l=max(l,j+1);
            }
            else t=0;
        }
        xj();
    }
    for(i=l;i>=1;--i)
    cout<<str[i];
    return 0;
}
posted @ 2017-02-19 15:32  杀猪状元  阅读(261)  评论(0编辑  收藏  举报