C语言求阶乘之和的三种实现方法(先阶乘再累加)

 更新时间:2022年07月11日 11:20:49   作者:CRH380AJ2808  
对于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++函数pyrUp和pyrDown来实现图像金字塔功能

    C++函数pyrUp和pyrDown来实现图像金字塔功能

    这篇文章主要介绍了C++函数pyrUp和pyrDown来实现图像金字塔功能,如何使用OpenCV函数 pyrUp 和 pyrDown 对图像进行向上和向下采样,需要的朋友可以参考下
    2017-03-03
  • C语言链表实现简单图书管理系统

    C语言链表实现简单图书管理系统

    这篇文章主要为大家详细介绍了C语言链表实现简单图书管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • floyd算法实现思路及实例代码

    floyd算法实现思路及实例代码

    这篇文章主要介绍了floyd算法实现思路及实例代码,有需要的朋友可以参考一下
    2014-01-01
  • 一篇文章详解Qt中如何访问数据库

    一篇文章详解Qt中如何访问数据库

    Qt是一个广泛使用的跨平台应用程序框架,它提供了许多功能,包括数据库访问,这篇文章主要给大家介绍了关于Qt中如何访问数据库的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-07-07
  • Easyx实现窗口自动碰撞的小球

    Easyx实现窗口自动碰撞的小球

    这篇文章主要为大家详细介绍了Easyx实现窗口自动碰撞的小球,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • C语言实现BST二叉排序树的基本操作

    C语言实现BST二叉排序树的基本操作

    这篇文章主要为大家详细介绍了C语言实现BST二叉排序树的基本操作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • 浅谈C++/C关于#define的那些奇奇怪怪的用法

    浅谈C++/C关于#define的那些奇奇怪怪的用法

    本文主要介绍了C++/C关于#define的那些奇奇怪怪的用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • 深入理解C++函数栈帧

    深入理解C++函数栈帧

    本文主要介绍了C++函数栈帧,详细的介绍了C++函数栈帧的概念以及使用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • 详解C++11 线程休眠函数

    详解C++11 线程休眠函数

    这篇文章主要介绍了C++11 线程休眠函数的相关资料,帮助大家更好的理解和学习C++11,感兴趣的朋友可以了解下
    2020-10-10
  • C语言float内存布局示例详解

    C语言float内存布局示例详解

    这篇文章主要为大家介绍了C语言float内存布局示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09

最新评论