废了一下午搞出来的一个高精度题,自己真的太笨了

题目链接: https://www.luogu.com.cn/problem/P1009

  题目大意:

    

题目描述

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

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

输入格式

一个正整数 nnn。

输出格式

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

输入输出样例

输入 #1
3
输出 #1
9

说明/提示

【数据范围】

对于 100%100 \%100% 的数据,1≤n≤501 \le n \le 501n50。

【其他说明】

注,《深入浅出基础篇》中使用本题作为例题,但是其数据范围只有 n≤20n \le 20n20,使用书中的代码无法通过本题。

如果希望通过本题,请继续学习第八章高精度的知识。

首先你要知道高精度的基本运算(加减乘除)

不会就去这里:  https://oi-wiki.org/math/bignum/#_4

代码展示


 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int LEN=1000;
 4 void clear(int a[]){
 5     for(int i=0;i<LEN;i++){
 6         a[i]=0;
 7     }
 8 }
 9 void mul(int a[], int b, int c[]) {
10   clear(c);
11   for (int i = 0; i < LEN - 1; ++i) {
12     // 直接把 a 的第 i 位数码乘以乘数,加入结果
13     c[i] += a[i] * b;
14 
15     if (c[i] >= 10) {
16       // 处理进位
17       // c[i] / 10 即除法的商数成为进位的增量值
18       c[i + 1] += c[i] / 10;
19       // 而 c[i] % 10 即除法的余数成为在当前位留下的值
20       c[i] %= 10;
21     }
22   }
23 }
24 void print(int a[]){
25     int i;
26     for(i=LEN-1;i>=1;i--){
27         if(a[i]!=0){
28             break;
29         }
30     }
31     for(int j=i;j>=0;j--){
32         cout<<a[j];
33     }
34     cout<<endl;
35 }
36 void copy(int a[],int b[]){
37     clear(a);
38     for(int i=0;i<LEN;i++){
39         a[i]=b[i];
40     }
41 }
42 void add(int a[],int b[],int c[]){
43     clear(c);
44     for(int i=0;i<LEN;i++){
45         c[i]+=a[i]+b[i];
46         if(c[i]>=10){
47             c[i+1]++;
48             c[i]-=10;
49         }
50     }
51 }
52 int a[LEN]={0};
53 int b[LEN]={0};
54 int c[LEN]={0};
55 int ans[LEN]={0};
56 int t[LEN]={0};
57 int main(){
58     int n;
59     cin>>n;
60     a[0]=1;
61     for(int i=1;i<=n;i++){
62         mul(a,i,c);
63         copy(a,c);
64         copy(b,ans);
65         add(c,b,ans);
66         // print(ans);
67     }
68     // cout<<endl;
69     print(ans);
70     system("pause");
71     return 0;
72 }

 希望这篇博客对你有帮助

posted @ 2022-03-31 20:35  是若水啊  阅读(242)  评论(0)    收藏  举报
/* 设置文章评论功能 */ 返回顶端 levels of contents