# 高精度：阶乘之和

## 输入输出样例

```3
```

`9思路：用到了两种高精度，阶乘高精度和加法高精度。高精度阶乘有两种代码：`
``` 1 void JieCheng(int a[], int c)
2 {
3     for (int i = 2; i <= c; i++)
4     {
5         int jw = 0;
6         int j = 0;
7         int temp;
8
9         while (j < length)
10         {
11             temp = jw;
12             jw = (a[j] * i + jw) / 10;
13             a[j] = (a[j] * i + temp) % 10;
14             j++;
15         }
16     }
17 }```

``` 1 void cheng(int *a,int c)
2 {
3     int jw=0;
4     for(int i=1;i<=1000;i++)
5     {
6         a[i]=a[i]*c+jw;
7         jw=a[i]/10;
8         a[i]%=10;
9     }
10 }```

``` 1 void pplus(int a[], int c[])
2 {
3     int jw = 0;
4
5     for (int i = 1; i < length; i++)
6     {
7         c[i] += a[i] + jw;
8         jw = c[i] / 10;
9         c[i] %= 10;
10     }
11 }```

``` 1 #include<iostream>
2 #include<cstring>
3
4 using namespace std;
5 const int length = 2000;
6
7 void JieCheng(int a[], int c)
8 {
9     for (int i = 2; i <= c; i++)
10     {
11         int jw = 0;
12         int j = 0;
13         int temp;
14
15         while (j < length)
16         {
17             temp = jw;
18             jw = (a[j] * i + jw) / 10;
19             a[j] = (a[j] * i + temp) % 10;
20             j++;
21         }
22     }
23 }
24
25 void pplus(int a[], int c[])
26 {
27     int jw = 0;
28
29     for (int i = 1; i < length; i++)
30     {
31         c[i] = c[i] + a[i] + jw;
32         jw = c[i] / 10;
33         c[i] %= 10;
34     }
35 }
36
37 int main()
38 {
39     int a[length];
40     int c[length];
41     int n, sum = 0;
42
43     memset(a, 0, sizeof(a));
44     memset(c, 0, sizeof(a));
45     cin >> n;
46     if (n == 0)
47     {
48         cout << "0";
49         return 0;
50     }
51     a[1] = 1;
52     for (int i = 1; i <= n; i++)
53     {
54         JieCheng(a, i);
55         pplus(a, c);
56         memset(a, 0, sizeof(a));
57         a[1] = 1;
58     }
59
60     int flag = 0;
61     for (int i = length-1; i >= 1; i--)
62     {
63         if (c[i] != 0)
64             flag = 1;
65         if (flag)
66             cout << c[i];
67
68     }
69     return 0;
70 }```
` `

## 洛谷 P1009 阶乘之和

P1009 阶乘之和 题目描述 用高精度计算出S=1!+2!+3!+…+n!(n≤50) 其中“!”表示阶乘,例如:5!=5*4*3*2*1. 输入输出格式 输入格式: 一个正整数N. 输出格式: 一个正整数S,表示计算结果. 输入输出样例 输入样例#1: 复制 3 输出样例#1: 复制 9思路:高精度加法+高精度乘法. #include<cstdio> #include<cstring> #include<iostream> #include<algorithm

## 数的阶乘之和

package nothh; public class mmm { public static void main(String[] args) { // TODO Auto-generated method stub //4到1的阶乘之和 int x = 0; int y = 0; int z = 4; while(z>=0) { x = z; for(int j = z - 1; j > 0; j--) { x = j * x; } z--; y = x+y; } System.out.p

## C语言之函数调用02—一个三位数的正整数=它的各位数字的阶乘之和

//函数调用+枚举法 /* ========================================================== 题目:求一个三位数的正整数=它的各位数字的阶乘之和! 如:145=1!+4!+5!. ========================================================== */ #include<stdio.h> int J(int n) { int t=1,i; for(i=1;i<=n;i++) t*=i;

## 编写前n项阶乘之和.java

public class C3_17 {      public static void main(String[] args)     {             int n=1,m,s,k=0;             while(n<=8)         {                     for(s=1,m=1;m<n;m++)                 s=s*m;//计算n!,结果存于s中             k=k+s;//计算前n项阶乘之和,结果存于k中