通过阶乘再深入认识循环

今天通过几个具体的阶乘计算的例子进一步加深对循环算法的认识。

(下面的代码有不严谨之处,暂且没有考虑溢出的情况,多多包涵,后面会慢慢改进)

一、计算n的阶乘

1、while循环

#include<stdio.h>
int main()
{
    int num = 0;
    int sum = 1;
    int i = 1;
    printf("请输入num:\n");
    scanf("%d", &num);
    while (i <= num)
    {
        sum = i * sum;
        i++;
    }
    printf("%d的阶乘结果是%d", num,sum);
    return 0;
}

运行结果:

 2、do…while循环

#include<stdio.h>
int main()
{
    int i = 1;
    int sum = 1;
    int num = 0;
    printf("请输入num:\n");
    scanf("%d", &num);
    do
    {
        sum = i * sum;
        i++;
    }
    while (i <= num);
    printf("%d的阶乘结果是%d", num,sum);
    return 0;
}

运行结果:

 3、for循环

#include<stdio.h>
int main()
{
    int i = 1;
    int num = 0;
    int sum = 1;
    printf("请输入num:\n");
    scanf("%d", &num);
    for (i = 1; i <= num; i++)
    {
        sum = i * sum;
    }
    printf("%d的阶乘结果是%d", num, sum);
    return 0;
}

运行结果:

 二、计算1!+2!+3!+…+n!(溢出问题暂时不考虑,此处假设n较小)

1、用两个for循环来控制,实现前num个数阶乘和的计算

#include<stdio.h>
int main()
{
    int k = 0;
    int i = 0;
    int num1 = 0;
    int sum1=1, sum2=0;
    printf("您想求前几个数阶乘的和?\n");
    scanf("%d", &num1);
    for (i = 1; i <= num1; i++)
    {
        for (k = 1; k <= i; k++)
        {
            sum1 = sum1 * k;
        }
        sum2 = sum2 + sum1;
        sum1 = 1;//细品这句代码
    }
    printf("前%d个数的阶乘的和为%d\n",num1,sum2);
    return 0;
}

运行结果:

这种逻辑虽然可行,但是不建议使用,因为没有充分用到上一个数阶乘计算的结果,下面这种逻辑效率更高。

 2、利用前面运算的结果来进行下一次运算

#include<stdio.h>
int main()
{
    int i = 0;
    int num1 = 0;
    int sum1 = 1;
    int sum2 = 0;
    printf("您想求前几个数阶乘的和?\n");
    scanf("%d", &num1);
    for (i = 1; i <= num1; i++)
    {
        sum1 = sum1 * i;//sum1保留了第(i-1)个数的阶乘结果,在此仅*i,即可得到第i个数的阶乘结果
        sum2 = sum2 + sum1;//放入for循环内部
    }
    printf("前%d个数的阶乘的和为%d\n", num1, sum2);
    return 0;
}

运行结果:

好了,大家感受一下循环,就先到这里,明天见!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值