zoukankan      html  css  js  c++  java
  • 15. 阶乘之和

    题目:

    输入 n ,计算 S = 1! + 2! + 3! + ...+ n! 的末6位(不含前导0)。 n <= 10^6, n!表示前 n 个正整数之积。

    样例输入:

    10

    样例输出:

    37913

    思路:

    用一个累加器 sum 来记录总和,用 term 来表示每一项的阶乘。

    第一种方法是用二重循环,中规中矩的算法。

    第二种方法,观察可知,后一项的值等于前一项乘当前项序号,于是每次能够利用前面已经算出的阶乘结果,这样就能避免二重循环。

    还需注意,在大数做乘法时的溢出问题。解决方法:在每次计算完当前项结果之后,马上进行取模,再每次累加之后,迅速对 sum 也进行取模。

    代码:

    #include <iostream>
    using namespace std;

    int main()
    {
    const int MOD = 1000000;
    int sum = 0, n = 0;
    cin >> n;

    for (int i = 1; i <= n; ++i) {
    int static term = 1;
    term *= i;
    sum += (term % MOD);
    }

    cout << sum % MOD << endl;

    return 0;
    }
  • 相关阅读:
    Redis学习第二天
    Redis学习
    jQuery基础
    Hashtable 和 HashMap 的区别
    JSP页面乱码问题
    Day28 java8:Stream API
    转 链表中节点每k个一组反转
    day 27 lambda表达式(针对接口) & 函数式接口
    day20异常2
    day20 异常1
  • 原文地址:https://www.cnblogs.com/Hello-Nolan/p/12114973.html
Copyright © 2011-2022 走看看