对于C/C++初学者来说,可能会经常遇到如计算阶乘等问题,下面这篇文章主要给大家介绍了关于C语言求阶乘之和的三种实现方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
题目:
此处题目是以1-20的阶乘之和举例
方法一:使用一层for循环实现 代码简单快捷容易理解
代码示例如下:
#include<stdio.h>
int main()
{
double a = 1, sum = 0;//因为最后值可能会超出int所能接收的范围 故用double
int n, i;
scanf("%d", &n);//注意scanf_s和scanf的使用场景
for (i = 1; i <= n; i++)
{
a = a*i;
sum = sum + a;
}
printf("%lld", sum);//double的输入格式要对
return 0;
}运行结果如下:
方法二:使用两层for循环嵌套
代码示例如下:
//需要注意对于1-20阶乘结果已经超出了int能够接收的范围
// 故用double类型
//1.遍历获取每一个数字[1-20]
//2.对每一个数进行阶乘
//3.对每个数字的阶乘结果进行求和
int main()
{
double total_sum = 0.0;
for (int i = 1; i <= 20; i++)//i控制求和
{
//i=8 ---> 8*7*6*....*1
double single_num = 1.0;
for (int j = i; j > 0; j--)
{
single_num *= j;//j控制阶乘
}
total_sum += single_num;
}
printf("%lf\n", total_sum);
return 0;
}运行结果如下:
方法三:函数递归实现
#include<stdio.h>
long int fac(unsigned int n) //定义为long int 型,避免溢出
{
long int f;
if (n == 0) return; //当n=0是,递归法到尽头,依次返回函数值。
f = fac(n - 1) * n;
return (f); //返回最后一次函数值,即单次阶乘的最后结果
}
int main()
{
unsigned int n;
long int s =0;
int i;
scanf_s("%d", &n);//此处注意scanf_s与scanf的使用场景
for (i = 1; i <= n; i++) s += fac(i); //以循环控制阶乘的和。fac函数每一次的返回值作为s的自加值
printf("%ld", s);
return 0;
}#include<iostream>
#include<cmath>
double fac(double t)
{
if (t == 1)
return 1;
else
return t * fac(t - 1);
}
int main()
{
using namespace std;
double i, n, sum = 0;
cin >> n;
if (n > 14)
return 0;
for (i = 1; i < n; i++)
{
double b = fac(i);
sum += b;
}
cout << "sum =" << sum << endl;
printf("%lf\n", sum);
return 0;
}代码运行结果如下:
编者注:以上对本小题的代码编写的多种方法,欢迎大家收藏借鉴并转发;
总结
到此这篇关于C语言求阶乘之和的三种实现方法的文章就介绍到这了,更多相关C语言求阶乘之和内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
沃梦达教程
本文标题为:C语言求阶乘之和的三种实现方法(先阶乘再累加)
猜你喜欢
- 我应该为我的项目使用相对包含路径,还是将包含目录放在包含路径上? 2022-10-30
- 详解C语言中sizeof如何在自定义函数中正常工作 2023-04-09
- Easyx实现扫雷游戏 2023-02-06
- C语言详解float类型在内存中的存储方式 2023-03-27
- C语言qsort()函数的使用方法详解 2023-04-26
- C语言手把手带你掌握带头双向循环链表 2023-04-03
- C++ 数据结构超详细讲解顺序表 2023-03-25
- c++ const 成员函数,返回一个 const 指针.但是返回的指针是什么类型的 const? 2022-10-11
- Qt计时器使用方法详解 2023-05-30
- ubuntu下C/C++获取剩余内存 2023-09-18
