输入n,计算S=1!+2!+3!+…+n!的末6位(不含前导0)。 n≤106,n!表示
前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 }