zoukankan      html  css  js  c++  java
  • 求1977!

    #include <iostream>
    #include <cstdio>

    using namespace std;

    typedef long long LL;

    const int maxn = 100010;

    int num[maxn], len;

    /*
    在mult函数中,形参部分:len每次调用函数都会发生改变,n表示每次要乘以的数,最终返回的是结果的长度
    tip: 阶乘都是先求之前的(n-1)!来求n!
    初始化Init函数很重要,不要落下
    */

    void Init() {
    len = 1;
    num[0] = 1;
    }

    int mult(int num[], int len, int n) {
    LL tmp = 0;
    for(LL i = 0; i < len; ++i) {
    tmp = tmp + num[i] * n; //从最低位开始,等号右边的tmp表示当前位,左边的tmp表示进位(之前进的位)
    num[i] = tmp % 10; // 保存在对应的数组位置,即去掉进位后的一位数
    tmp = tmp / 10; // 取整用于再次循环,与n和下一个位置的乘积相加
    }
    while(tmp) { // 之后的进位处理
    num[len++] = tmp % 10;
    tmp = tmp / 10;
    }
    return len;
    }

    int main() {
    Init();
    int n;
    n = 1977; // 求的阶乘数
    for(int i = 2; i <= n; ++i) {
    len = mult(num, len, i);
    }
    for(int i = len - 1; i >= 0; --i)
    printf("%d",num[i]); // 从最高位依次输出,数据比较多采用printf输出
    printf(" ");
    return 0;
    }

  • 相关阅读:
    NYOJ 10 skiing DFS+DP
    51nod 1270 数组的最大代价
    HDU 4635 Strongly connected
    HDU 4612 Warm up
    POJ 3177 Redundant Paths
    HDU 1629 迷宫城堡
    uva 796
    uva 315
    POJ 3180 The Cow Prom
    POJ 1236 Network of Schools
  • 原文地址:https://www.cnblogs.com/--lr/p/6129408.html
Copyright © 2011-2022 走看看