18.7.29 luogu P1009 阶乘之和[高精加法&乘法]

题目描述

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

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

输入输出格式

输入格式:

 

一个正整数 NN 。

 

输出格式:

 

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

 

输入输出样例

输入样例#1: 
3
输出样例#1: 
9
 1 #include <cstdio>
 2 #include <algorithm>
 3 #include <cstring>
 4 #include <math.h>
 5 #include <iostream>
 6 
 7 using namespace std;
 8 
 9 struct num {
10     int a[100];
11     num(){ memset(a, 0, sizeof(a)); }
12     num(int x) {
13         memset(a, 0, sizeof(a));
14         int i = 0;
15         while (x) {
16             i++;
17             a[i] = x % 10;
18             x /= 10;
19         }
20         a[0] = i;
21     }
22     num operator +(num p) {
23         int l = max(a[0], p.a[0]);
24         num ans;
25         for (int i = 1; i <= l; i++) {
26             ans.a[i] += a[i] + p.a[i];
27             if (ans.a[i] > 9) {
28                 ans.a[i] -= 10;
29                 ans.a[i + 1]++;
30             }
31         }
32         if (ans.a[l + 1] != 0)l++;
33         ans.a[0] = l;
34         return ans;
35     }
36     num operator *(num p) {
37         num ans;
38         for(int i=1;i<=a[0];i++)
39             for (int j = 1; j <= p.a[0]; j++) {
40                 ans.a[i + j - 1] += a[i] * p.a[j];
41                 ans.a[i + j ] += ans.a[i + j - 1] / 10;
42                 ans.a[i + j - 1] %= 10;
43                 ans.a[0] = max(ans.a[0], i + j - 1);
44                 if (ans.a[i + j ] != 0)
45                     ans.a[0] = max(ans.a[0], i + j );
46             }
47         return ans;
48     }
49     void print() {
50         printf("%d", a[a[0]]);
51         for (int i = a[0] - 1; i >= 1; i--)
52             printf("%d", a[i]);
53         printf("\n");
54     }
55 };
56 
57 int main()
58 {
59     int n;
60     scanf("%d", &n);
61     num tmp(1),ans(0);
62     for (int i = 1; i <= n; i++) {
63         tmp=tmp*i;
64         ans = ans + tmp;
65     }
66     ans.print();
67     return 0;
68 }
View Code

可当模板

猜你喜欢

转载自www.cnblogs.com/yalphait/p/9385591.html
今日推荐