P1009 阶乘之和 洛谷

https://www.luogu.org/problem/show?pid=1009

题目描述

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

其中“!”表示阶乘,例如:5!=54321。

输入输出格式

输入格式:

 

一个正整数N。

 

输出格式:

 

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

 

输入输出样例

输入样例#1:
3
输出样例#1:
9
 1 #include <algorithm>
 2 #include <iostream>
 3 
 4 using namespace std;
 5 
 6 int n;
 7 int sum[505],mul[505];
 8 
 9 void multiply(int k)
10 {
11     int x=0;
12     for(int i=1;i<=mul[0];i++)
13     {
14         mul[i]=mul[i]*k+x;
15         if(mul[i]>9)
16         {
17             x=mul[i]/10;
18             mul[i]%=10;
19             mul[0]=max(mul[0],i+1);
20         }
21         else x=0;
22     }
23 
24 }
25 
26 void add()
27 {
28     int x=0,k=max(mul[0],sum[0]);
29     for(int i=1;i<=k;i++)
30     {
31         sum[i]=sum[i]+mul[i];
32         sum[i+1]+=sum[i]/10;
33         sum[i]%=10;
34         //sum[0]++;
35     }
36 }
37 
38 int main()
39 {
40     cin>>n;
41     mul[0]=1;sum[0]=1;mul[1]=1;sum[1]=1;
42     for(int i=2;i<=n;i++)
43     {
44         multiply(i);
45         add();
46     }
47     for(int i=max(sum[0],mul[0]);i>=1;i--)
48         cout<<sum[i];
49     return 0;
50 }

 

posted @ 2017-04-04 16:36  Aptal丶  阅读(538)  评论(0编辑  收藏  举报