PTA 6-2 求阶乘(循环版) (10 分)

该博客提供了一个使用循环而非递归方法计算阶乘的C语言函数实现。函数名为doubleFac,接受一个非负整数x作为参数,返回x的阶乘。在函数中,通过一个循环从2开始到x,每次迭代都将当前数乘以前面所有数的乘积,最终得到阶乘结果。示例代码展示了如何计算4的阶乘,输出结果为24。

请编写函数,用循环方法求阶乘。

n!=1×2×3×⋯×n

规定:0!=1

函数原型

double Fac(int x);

说明:参数 x 为非负整数,函数值为 x 的阶乘。

要求:不要用递归方法。试试看,不用选择语句完成函数的设计。

裁判程序

#include <stdio.h>

double Fac(int x);

int main()
{
    int n;
    scanf("%d", &n);
    printf("%.10g\n", Fac(n));
    return 0;
}

/* 你提交的代码将被嵌在这里 */

输入样例

4

输出样例

24

测试样例

输入样例输出样例
01
11
5120
103628800
701.197857167e+100
double Fac(int x)
{
    long f=1;
    for(int i=2;i<=x;i++)
    {
         f *= i;
    }
    return f;
}

![](https://cdn.jsdelivr.net/gh/DreamBuilderTeam/DreamBuilder@main/docs/images/logo.png) 您好,我是由优快云和外部合作伙伴合作研发的AI作业模型机器人,很高兴为您服务。 --- ### 题目重述 输入一个正整数 $ n $,计算 $ 1! + 2! + 3! + \cdots + n! $ 的和,并输出结果。 **输入格式:** 输入一个正整数 $ n $($1 \leq n \leq 10$) **输出格式:** 输出一个整数,表示阶乘和 **输入样例:** ``` 5 ``` **输出样例:** ``` 153 ``` > 解释: > $ 1! = 1 $ > $ 2! = 2 $ > $ 3! = 6 $ > $ 4! = 24 $ > $ 5! = 120 $ > 和为:$ 1 + 2 + 6 + 24 + 120 = 153 $ --- ### 给出答案(高效简洁代码) ```cpp #include <cstdio> using namespace std; int main() { int n, sum = 0, factorial = 1; scanf("%d", &n); for (int i = 1; i <= n; i++) { factorial *= i; // 计算 i! sum += factorial; // 累加到总和 } printf("%d\n", sum); return 0; } ``` --- ### 代码解析 1. **`factorial *= i`**:利用前一项的阶乘快速计算当前项,避免重复计算。 2. **`sum += factorial`**:每得到一个 $ i! $,立即加到总和中。 3. **循环从 1 到 n**:逐项计算并累加,时间复杂度 $ O(n) $。 4. **使用 `scanf` 和 `printf`**:符合 PTA 常见输入输出要,不依赖 `cin/cout`。 --- ### 知识点(列出该代码中遇到的知识点) 1. **阶乘的递推计算** 利用 $ i! = (i-1)! \times i $,避免重复乘法,提高效率。 2. **累加和思想** 使用变量 `sum` 持续累加每一项的阶乘值。 3. **循环控制与变量初始化** 正确设置循环范围和初始值,确保逻辑正确执行。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酷拉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值