zoukankan      html  css  js  c++  java
  • 阶乘之和(算法竞赛入门经典)[求余问题]

    输入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 }
  • 相关阅读:
    迭代器和生成器
    装饰器进阶
    闭包和装饰器
    函数的嵌套
    函数的参数
    什么是粘包现象
    模拟ssh远程命令执行
    客户端与服务端代码bug修复和加入循环
    用socket实现简单的套接字通讯
    网络编程之客户端和服务端,
  • 原文地址:https://www.cnblogs.com/wujufengyun/p/6889936.html
Copyright © 2011-2022 走看看