有没有大佬救一下
查看原帖
有没有大佬救一下
1499244
Ww15537360026楼主2025/1/23 17:08
#include <stdio.h>
#define MAX_DIGITS 1000

void p(int a[], int* b, int n) {
    int c = 0;
    for (int i = 0; i < *b; i++) {
        int rest = a[i] * n + c;
        a[i] = rest % 10;
        c = rest / 10;
    }
    while (c) {
        a[*b] = c % 10;
        c /= 10;
        (*b)++;
    }
}
 
void p1(int a[], int* a_len, int b[], int b_len) {
    int c = 0;
    int max_len = (*a_len > b_len) ? *a_len : b_len;
    for (int i = 0; i < max_len; i++) {
        int sum = c;
        if (i < *a_len) sum+=a[i];
        if (i < b_len) sum += b[i];
        if (i < *a_len) {
            a[i] = sum % 10;
        }
        else {
            a[i] = sum % 10; 
        }
        c = sum / 10;
    }
    if (c) {
        a[max_len] = c % 10;
        (*a_len) = max_len + 1;
    }
    else {
        (*a_len) = max_len;
    }
}

int main() {
    int n;
    printf("请输入 n: ");
    scanf_s("%d", &n);

    int sum[MAX_DIGITS] = { 0 }; 
    int sum_len = 1;  
    int factorial[MAX_DIGITS] = { 1 };  
    int factorial_len = 1;  

    for (int i = 1; i <= n; i++) {
        p(factorial, &factorial_len, i);  
        p1(sum, &sum_len, factorial, factorial_len);  
    }

    for (int i = sum_len - 1; i >= 0; i--) {
        printf("%d", sum[i]);
    }
    
    return 0;
}

2025/1/23 17:08
加载中...