1! + 2! + 3! + ... + 20!的值,实为求阶乘问题
嵌套循环实现
#include<stdio.h>
int main(){
float res = 0.0;
for(int i=1;i<=20;i++){
float sum = 1.0;
for(int j=i;j>0;j--){
sum *= j;
}
res += sum;
}
printf("1-20的阶乘之和为:%f",res);
return 0;
}
说明:首先定义了一个名为res的浮点型变量,并将其初始化为0。
定义了一个外部循环,从i=1开始,每次循环递增i,直到i=20。在每次循环开始时,定义一个名为sum的浮点型变量,并将其初始化为1.0。
紧接着定义一个内部循环,从j=i开始,每次循环递减j,直到j=1。在每次循环中,将sum乘以j,相当于计算i的阶乘并将结果存储在sum中。
在外部循环的每次迭代中,将当前计算得到的阶乘值sum加到res上,实现累加求和的功能。
使用printf函数打印输出1到20的阶乘之和的结果。
最后是主函数的返回语句,表示程序正常结束。
函数实现
使用函数可以提高代码的执行效率,减少代码的错误、易于理解和维护、提高代码的复用率等优点
#include <stdio.h>
float fac(int n) {
float res = 1.0;
for (int i = 1; i <= n; i++) {
res *= i;
}
return res;
}
int main(){
float res = 0.0;
for(int i = 1; i <= 20; i++){
res += fac(i); // 调用计算阶乘的函数
}
printf("1-20的阶乘之和为:%f", res);
return 0;
}
说明:首先定义了一个名为fac的函数,用于计算n的阶乘。在函数内部,定义了一个浮点型变量res并初始化为1.0。然后使用for循环从1到n进行迭代,每次将当前i乘以res并将结果存储在res中。最后返回计算得到的阶乘值res。
在主函数中,定义了一个浮点型变量res,并初始化为0.0。然后使用for循环从1到20进行迭代,每次调用fac函数计算当前i的阶乘并将结果累加到res中。最后使用printf函数打印输出1到20的阶乘之和的结果。
运行结果
总结
这个问题是关于计算1到20的阶乘之和,最初使用了循环嵌套方式来计算阶乘,后来使用了函数的形式来计算阶乘之和。总的来说,使用递归或者循环都可以实现阶乘的计算,但是在这个特定的问题中,使用循环更为简单和直接。而将阶乘计算封装成函数的形式,可以提高代码的可读性、可维护性和重用性,使得代码更加模块化。
作者: 路羽, 转载或复制请以 超链接形式 并注明出处 路羽博客。
原文地址: 《C语言-求阶乘之和两种算法分别利用循环与递归实现》 发布于2023-11-13
评论