今天通过几个具体的阶乘计算的例子进一步加深对循环算法的认识。
(下面的代码有不严谨之处,暂且没有考虑溢出的情况,多多包涵,后面会慢慢改进)
一、计算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;
}
运行结果:
好了,大家感受一下循环,就先到这里,明天见!