【NOIP1998 普及组】阶乘之和

题目很简单,但是数据的值很大,需要高精度,c++的话需要自己写一个高精度运算。

题目描述

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

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

输入格式

一个正整数 nn

输出格式

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

输入输出样例

输入 #1

1
3

输出 #1

1
9

说明/提示

【数据范围】

对于 100%100% 的数据,1≤n≤501≤n≤50。


对着题解写的,学习了一下c++的运算符重载。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <cstdio>
using namespace std;

struct f
{
int len, s[10000];
f()
{
memset(s, 0, sizeof(s));
len = 1;
}
f operator = (const char *num)
{
len = (int)strlen(num);
for(int i = 0; i < len; i++)
s[i] = num[len - i - 1] - '0';
return *this;
}
f operator = (const int num)
{
char a[10000];
sprintf(a, "%d", num);
*this = a;
return *this;
}
f (const int num)
{
*this = num;
}
f (const char *num)
{
*this = num;
}
f operator + (const f &a)
{
f c;
c.len = max(len, a.len) + 1;
for(int i = 0, x = 0; i < c.len; i++)
{
c.s[i] = s[i] + a.s[i] + x;
x = c.s[i] / 10;
c.s[i] = c.s[i] % 10;
}
if(c.s[c.len - 1] == 0)
--c.len;
return c;
}
f operator * (const f &x)
{
f c;
c.len = len + x.len;
for(int i = 0; i < len; i++)
{
for(int j = 0; j < x.len; j++)
{
c.s[i + j] += s[i] * x.s[j];
c.s[i + j + 1] += c.s[i + j] / 10;
c.s[i + j] %= 10;
}
}
if(c.s[c.len - 1] == 0)
--c.len;
return c;
}
};
ostream& operator << (ostream &out, const f &x)
{
for(int i = x.len - 1; i >= 0; i--)
out << x.s[i];
return out;
}
istream& operator >> (istream &in, f &x)
{
char num[10000];
in >> num;
x = num;
return in;
}


int main(int argc, const char *argv[])
{
int n;
cin >> n;
f ans = 0, num = 1;
for(int i = 1; i <= n; i++)
{
num = num * i;
ans = ans + num;
}
cout << ans << endl;

return 0;
}

【NOIP1998 普及组】阶乘之和

https://blog.kannpi.com/2021/03/阶乘之和/

作者

Jhuoer Yen

发布于

2021-03-14

更新于

2023-09-18

许可协议

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×