社区讨论

75分求助

P1009[NOIP 1998 普及组] 阶乘之和参与者 3已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@lo1tyq6v
此快照首次捕获于
2023/10/23 02:56
2 年前
此快照最后确认于
2023/11/03 03:30
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;

int a[100], s[100], la, ls;

void add() {
    int x = 0;
    for(int i = 0; i < la; ++i) {
        s[i] += a[i] + x;
        x = s[i] / 10;
        s[i] %= 10;
    }
    if(la > ls) ls = la;
    if(x) {
        s[la++] += x;
    }
    while(s[ls - 1] == 0 && ls > 1) ls--;
}

void mul(int n) {
    int x = 0;
    for(int i = 0; i < la; ++i) {
        a[i] = a[i] * n + x;
        x = a[i] / 10;
        a[i] %= 10;
    }
    if(x) a[la++] = x;
    while(a[la - 1] == 0 && la > 1) la--;
    return;
}

int main() {
    int n, n2;
    ls = 1;
    s[0] = 0;
    cin >> n;
    n2 = n;
    while(n2) {
        a[la++] = n2 % 10;
        n2 /= 10;
    }
    for(int i = 1; i <= n; ++i) {
        memset(a, 0, sizeof(a));
        la = 1;
        a[0] = 1;
        for(int j = i; j >= 1; --j) {
            mul(j);
        }
        add();
    }
    for(int i = ls - 1; i >= 0; --i) {
        cout << s[i];
    }
    return 0;
}

回复

5 条回复,欢迎继续交流。

正在加载回复...