阶乘之和(算法竞赛入门经典)[求余问题]

输入n,计算S1!+2!+3!+n!的末6位(不含前导0)。 n≤106n!表示
n个正整数之积。
样例输入:
10
样例输出:
37913

 1 #include<iostream>
 2 #include<iomanip>
 3 #include<cmath>
 4 #include<vector>
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     int n;
10     cin >> n;
11     int sum = 0;
12     for (int i = 1; i <= n; i++)
13     {
14         int x = i;
15         int ss = 1;
16         while (x >= 1)
17         {
18             ss *= x;
19             x--;
20         }
21         sum += ss;
22     }
23     cout <<sum%1000000<< endl;
24     system("pause");
25     return 0;
26 }

这道题开始的时候,求末六位,我就简单的一位一位的求,但看到结果,我发现原来这么简单,还是自己练的少。但是上述代码还是有问题的,当n很大时,比如n=100时,就会发生溢出,所以可以改善,每一步都进行求余。

 1 #include<iostream>
 2 #include<iomanip>
 3 #include<cmath>
 4 #include<vector>
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     int n;
10     cin >> n;
11     int sum = 0;
12     for (int i = 1; i <= n; i++)
13     {
14         int x = i;
15         int ss = 1;
16         while (x >= 1)
17         {
18             ss = ss*x%1000000;
19             x--;
20         }
21         sum = (sum+ss)%1000000;
22     }
23     cout <<sum<< endl;
24     system("pause");
25     return 0;
26 }
原文地址:https://www.cnblogs.com/wujufengyun/p/6889936.html