1 条题解

  • 0
    @ 2025-2-11 16:31:32
    #include <bits/stdc++.h>
    using namespace std;
    
    int ans[100005] = {1, 1};  // 存放阶乘,ans[0]存放位数,倒序存放每一位数字
    int jw[100005];  // 进位数组
    int n;
    
    int main() {
        cin >> n;  // 输入n
    
        for (int i = 1; i <= n; i++) {  // 从1到n计算阶乘
            // 对每一位进行乘法运算,并处理进位
            for (int j = 1; j <= ans[0]; j++) {  // 遍历当前阶乘的每一位
                ans[j] = ans[j] * i + jw[j];  // 计算每一位的乘积,加上进位
                jw[j] = 0;  // 重置进位
    
                if (ans[j] >= 10) {  // 如果当前位大于等于10,需要进位
                    jw[j + 1] += ans[j] / 10;  // 进位到下一位
                    ans[j] %= 10;  // 保留个位
                    if (j == ans[0]) ans[0]++;  // 如果进位到当前位末尾,位数加一
                }
            }
        }
    
        // 从高位到低位输出结果
        for (int i = ans[0]; i >= 1; i--) {
            cout << ans[i];
        }
        cout << endl;  // 输出换行
        return 0;
    }
    
    
    • 1

    信息

    ID
    652
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    23
    已通过
    3
    上传者