C语言:计算 1! + 2! + 3! + ... + n!

题目:

从键盘输入一个值n,计算 1的阶乘 至 n的阶乘 的和

如:输入10,计算 1的阶乘 至 n的阶乘 的和 --> 计算:1! + 2! + 3! + ... + 10!

                    

 =========================================================================

                       

思路一:

效率比较低,会重复计算之前计算过的阶乘,但逻辑简单好理解 

总体思路:

(1). 使用两个循环内循环 外循环

内循环:循环生成 1~n 个数字,再依次相乘,实现1~n其中一个值的阶乘

外循环:利用内循环计算的阶乘值,实现阶乘相加

             

(2). 最后再进行打印

             

第一步:

(1). 生成相关变量:()

                 

int i = 0; -- 作为外循环的循环变量

                

int j = 0; -- 作为内循环的循环变量

              

int n = 0; -- 获取输入的数据。

             

int ret = 1; -- 把每个数的阶乘计算后赋值给该变量

因为0乘任何数都为0,所以初始化为1

             

int sum = 0; -- 内循环执行后将各个数的阶乘相加后赋值给该值,作为最终结果

                     

                     

(2). 实现输入数据和获取数据 -- scanf()函数

             

实现代码:

#include <stdio.h>
int main()
{int i = 0; //外循环int j = 0; //内循环int n = 0; //输入nint ret = 1; //把每个数的阶乘计算后赋值给该变量,因为0乘任何数都为0,所以初始化为1。int sum = 0; //外循环后将各个数的阶乘相加后赋值给该值,作为最终结果。//输入:scanf("%d", &n);//记得使用取地址符:&return 0;
}

实现图片:

                 


                 

第二步:

(1). 编写外循环,实现各个阶乘的值相加sum += ret;

            

(2). 注意:

             

外循环的条件变量 i 要初始化为 1:因为在内循环中要使用 i 作为循环条件阶乘要从1开始

                

每次内循环结束后要重新把 ret变量 赋值为 1:因为内循环使用变量ret实现一个值的阶乘后改变了ret的值,而轮到求下一个值的阶乘时

还是要从1开始乘起,所以ret应该还是1的。  (效率低的原因)

                     

实现代码:

#include <stdio.h>
int main()
{int i = 0; //外循环int j = 0; //内循环int n = 0; //输入nint ret = 1; //把每个数的阶乘计算后赋值给该变量,因为0乘任何数都为0,所以初始化为1。int sum = 0; //外循环后将各个数的阶乘相加后赋值给该值,作为最终结果。//输入:scanf("%d", &n);//记得使用取地址符:&//实现代码:for (i = 1; i <= n; i++) //外循环:实现阶乘相加,相加到 n!{ret = 1;//内循环中相乘后赋值给该变量,每次出了内循环后要重新刷新该变量(重点)//内循环:循环生成 1~i 个数字,再依次相乘for (j = 1; j <= i; j++){ret = ret * j;//依次相乘再赋值给变量ret}sum += ret; //将各数的阶乘相加后赋给该值}return 0;
}

实现图片:

                 


                 

第三步:

(1). 编写内循环:循环生成 1~j 个数,再依次相乘,实现1~n其中一个值的阶乘

            

(2). 注意:内循环的条件变量 j 要初始化为 1:因为在内循环中要使用 j 进行相乘赋值为1防止0乘任何数为0

                     

实现代码:

#include <stdio.h>
int main()
{int i = 0; //外循环int j = 0; //内循环int n = 0; //输入nint ret = 1; //把每个数的阶乘计算后赋值给该变量,因为0乘任何数都为0,所以初始化为1。int sum = 0; //外循环后将各个数的阶乘相加后赋值给该值,作为最终结果。//输入:scanf("%d", &n);//记得使用取地址符:&//实现代码:for (i = 1; i <= n; i++) //外循环:实现阶乘相加,相加到 n!{ret = 1;//内循环中相乘后赋值给该变量,每次出了内循环后要重新刷新该变量(重点)//内循环:循环生成 1~i 个数字,再依次相乘for (j = 1; j <= i; j++){ret = ret * j;//依次相乘再赋值给变量ret}sum += ret; //将各数的阶乘相加后赋给该值}return 0;
}

实现图片:

                    

思路一:最终代码和实现效果:

最终代码:

#include <stdio.h>
int main()
{int i = 0; //外循环int j = 0; //内循环int n = 0; //输入nint ret = 1; //把每个数的阶乘计算后赋值给该变量,因为0乘任何数都为0,所以初始化为1。int sum = 0; //外循环后将各个数的阶乘相加后赋值给该值,作为最终结果。//输入:scanf("%d", &n);//记得使用取地址符:&//实现代码:for (i = 1; i <= n; i++) //外循环:实现阶乘相加,相加到 n!{ret = 1;//内循环中相乘后赋值给该变量,每次出了内循环后要重新刷新该变量(重点)//内循环:循环生成 1~i 个数字,再依次相乘for (j = 1; j <= i; j++){ret = ret * j;//依次相乘再赋值给变量ret}sum += ret; //将各数的阶乘相加后赋给该值}//打印:printf("%d\n", sum);return 0;
}

实现效果:

                    

 =========================================================================

                       

思路二:

在原本已计算的阶乘上再乘上“下一个数”,

实现“下一个数”的阶乘

总体思路:

(1). 只编写一个循环,求第一个值的阶乘后就直接赋值给sum,下一个值的阶乘直接在上一个值阶乘的基础上乘以下一个值,得下一个值的阶乘

           

(2). 最后再进行打印

             

第一步:

(1). 生成相关变量

                 

int i = 0; -- 作为循环变量

                

int n = 0; -- 获取输入的数据。

               

int ret = 1; -- 把每个数的阶乘计算后赋值给该变量

因为0乘任何数都为0,所以初始化为1

             

int sum = 0; -- 外循环执行后将各个数的阶乘相加后赋值给该值,作为最终结果

                     

                     

(2). 实现输入数据和获取数据 -- scanf()函数

             

实现代码:

#include <stdio.h>
int main()
{int i = 0; //循环变量int n = 0; //输入nint ret = 1; //把每个数的阶乘计算后赋值给该变量,因为0乘任何数都为0,所以初始化为1。int sum = 0; //外循环后将各个数的阶乘相加后赋值给该值,作为最终结果。//输入:scanf("%d", &n);//记得使用取地址符:&return 0;
}

实现图片:

                 


                 

第二步:

(1). 编写循环,求完第一个数的阶乘后,直接给到sum中,求第二个数的阶乘时,再在第一个数阶乘的基础上乘上第二个数,就是第二个数的阶乘了。以此类推……

            

(如:输入3,求 1! + 2! + 3

求了 1! 后赋给sum

求 2!时,就在 1!的基础上乘 2 就是2的阶乘了,再赋给sum相加,实现 1! + 2!

求 3!同理,以此类推

            

(2). 注意:循环的条件变量 i 要初始化为 1:因为阶乘要从1开始

                     

实现代码:

#include <stdio.h>
int main()
{int i = 0; //循环变量int n = 0; //输入nint ret = 1; //把每个数的阶乘计算后赋值给该变量,因为0乘任何数都为0,所以初始化为1。int sum = 0; //外循环后将各个数的阶乘相加后赋值给该值,作为最终结果。//输入:scanf("%d", &n);//记得使用取地址符:&//实现代码:for (i = 1; i <= n; i++) //外循环:实现阶乘相加,相加到 n!{ret = ret * i;//依次相乘再赋值给变量retsum += ret; //将各数的阶乘相加后赋给该值}return 0;
}

实现图片:

                    

思路二:最终代码和实现效果:

最终代码:

#include <stdio.h>
int main()
{int i = 0; //循环变量int n = 0; //输入nint ret = 1; //把每个数的阶乘计算后赋值给该变量,因为0乘任何数都为0,所以初始化为1。int sum = 0; //外循环后将各个数的阶乘相加后赋值给该值,作为最终结果。//输入:scanf("%d", &n);//记得使用取地址符:&//实现代码:for (i = 1; i <= n; i++) //外循环:实现阶乘相加,相加到 n!{ret = ret * i;//依次相乘再赋值给变量retsum += ret; //将各数的阶乘相加后赋给该值}//打印:printf("%d\n", sum);return 0;
}

实现效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/183737.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode-234 回文链表

我的解法&#xff1a;使用栈&#xff0c;定义了len略微复杂&#xff0c;拿链表的后半部分和前半部分比较即可&#xff0c;没必要全部比较 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* List…

如何在在线Excel文档中规范单元格输入

在日常的工作中&#xff0c;我们常常需要处理大量的数据。为了确保数据的准确性和可靠性。我们需要对输入的数据进行规范化和验证。其中一个重要的方面是规范单元格输入。而数据验证作为Excel中一种非常实用的功能&#xff0c;它可以帮助用户规范单元格的输入&#xff0c;从而提…

Java用log4j写日志

日志可以方便追踪和调试问题&#xff0c;以前用log4net写日志&#xff0c;换Java了改用log4j写日志&#xff0c;用法和log4net差不多。 到apache包下载下载log4j的包&#xff0c;解压后把下图两个jar包引入工程 先到网站根下加一个log4j2.xml的配置文件来配置日志的格式和参…

matlab中的iddata函数的初步理解和使用程序举例

matlab中的iddata函数的初步理解和程序举例 一、iddata函数功能 iddata函数常用于系统识别分析领域数据分析方面。该函数在时域或频域中&#xff0c;将用于系统识别的输入输出数据及其特性数据的生成对象数据类型。即&#xff0c;可以使用iddata函数封装要标识的系统的输入和…

Mysql数据库 8.SQL语言 外键约束

一、外键约束 外键约束——将一个列添加外键约束与另一张表的主键&#xff08;唯一列&#xff09;进行关联之后&#xff0c;这个外键约束的列添加的数据必须要在关联的主键字段中存在 案例 创建原则&#xff1a;先创建不含外键的表也就是班级表 添加外键的方式 一般使用第一…

HCIE-CCE

1、创建集群 svc网络&#xff0c;10.247 pod网络&#xff0c;10.244 节点网络&#xff0c;192.168.66&#xff08;master和node一致&#xff09; 2、创建节点 上面集群选择了最新版本1.27&#xff0c;CCE从1.27版本开始不再支持docker容器引擎&#xff0c;仅支持containered&…

git笔记

git常见命令 git init :初始化本地仓库&#xff0c;会生成一个.git文件&#xff0c;该文件用于管理和追踪该本地仓库&#xff0c;只有在git仓库下的文件才能被管理! git config user. name "用户名” git config user. email " 邮箱” git config -1 :列出当前git仓库…

python接口自动化测试 —— unittest框架suite、runner详细使用

test suite 测试套件&#xff0c;理解成测试用例集一系列的测试用例&#xff0c;或测试套件&#xff0c;理解成测试用例的集合和测试套件的集合当运行测试套件时&#xff0c;则运行里面添加的所有测试用例 test runner 测试运行器用于执行和输出结果的组件 test suite、tes…

Flask(Jinja2) 服务端模板注入漏洞(SSTI)

Flask&#xff08;Jinja2&#xff09; 服务端模板注入漏洞(SSTI) 参考 https://www.freebuf.com/articles/web/260504.html 验证漏洞存在 ?name{{7*7}} 回显49说明漏洞存在 vulhub给出的payload: {% for c in [].__class__.__base__.__subclasses__() %} {% if c.__name__…

【uniapp小程序下载】调用uni.uploadfile方法在调试工具里是没有问题的,但是线上版本和体验版就调用不成功,真机调试也没问题

把你的下载地址前缀添加到合法域名就解决了 在调试工具里成功了是因为勾选了下面这项 下面是我的下载并打开函数 methods: {// 下载downloadFileFn(data) {if (this.detailsObj.currentUserBuy) {uni.downloadFile({// data是路径url: https:// data,success(res) {//保存到本…

未来已来,“码”上见证---通义灵码

为了撰写一份关于通义灵码的产品测评&#xff0c;我将构建一个基于提供的产品介绍和评测内容要求的框架给大家介绍这款产品。 功能使用维度 代码智能生成 使用场景&#xff1a;开发中遇到需要编写新功能、单元测试、或对现有代码进行注释时。 使用效果&#xff1a;预期通义灵…

7.5 SpringBoot 拦截器Interceptor实战 统一角色权限校验

前言 在【7.1】管理员图书录入和修改API,当时预告过:并没有写【校验是否是管理员】的逻辑,因为是通用逻辑,会单写一篇来细讲,那么今天就来安排! 角色权限校验,是保证接口安全必备的能力:有权限才可以操作!所以,一般对于这种通用逻辑,推荐不与主业务逻辑耦合,那么…

二叉树的前序、中序、后序、层序遍历

参考内容&#xff1a; 五分钟让你彻底理解二叉树的非递归遍历 Python实现二叉树的非递归遍历 二叉树遍历——深度优先&#xff08;前中后序&#xff09;广度优先&#xff08;层序遍历&#xff09; 构造二叉树 定义二叉树结构如下 struct node {int data;node *left;node *rig…

C++前缀和算法的应用:统计上升四元组

C前缀和算法的应用&#xff1a;统计上升四元组 本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 题目 给你一个长度为 n 下标从 0 开始的整数数组 nums &#xff0c;它包含 1 到 n 的所有数字&#xff0c;请你返回上…

关于网站安全的一些讨论

互联网的普及和发展为企业和个人提供了巨大的机会&#xff0c;但同时也伴随着网络安全威胁的增加。网站被攻击是一个常见的问题&#xff0c;可能导致数据泄露、服务中断和声誉受损。在本文中&#xff0c;我们将探讨与网络安全紧密相关的因素&#xff0c;分析为什么网站容易受到…

Si4010 一款带有MCU SoC RF发射机芯片 无线遥控器

Si4010是一款完全集成的SoC RF发射机&#xff0c;带有嵌入式CIP-51 8051 MCU&#xff0c;专为1GHz以下ISM频带设计。该芯片针对电池供电的应用进行了优化&#xff0c;工作电压为1.8至3.6 V&#xff0c;待机电流小于10 nA的超低电流消耗。高功率放大器可提供高达10 dBm的输出功率…

Linux Crontab 定时任务

crond 服务 Linux 通过 crond 服务来支持 crontab。 查看 crond 服务是否已经安装 输入下面命令确认 crond 服务是否已安装。 systemctl list-unit-files | grep crond 如果为 enabled&#xff0c;表示服务正运行。 crontab 文件 crontab 要执行的定时任务都被保存在 /etc…

seata1.8安装部署

1.在nacos里面创建命名空间 2.下载seata安装包 3.将下载的seata解压&#xff0c;找到seata/script/server/db目录下对应数据库的sql脚本&#xff0c;创建数据库 undo_log.sql CREATE TABLE undo_log (branch_id bigint(20) NOT NULL COMMENT branch transaction id,xid varcha…

3线SPI驱动 HX8347 TFT屏

老五家2.8寸屏&#xff0c;3线SPI驱动 前言 要知道屏幕的驱动芯片都小的惊人&#xff0c;想必是不会打上丝印的。从几百个引脚中判断哪个是哪个&#xff0c;想想就晕。 大佬们都太厉害了&#xff0c;看看PFC就知道屏幕的接线定义。一直好奇这种神技是怎么练成的。也尝试自己来…

字符型液晶显示器LCD 1602的显示控制(Keil+Proteus)

前言 趁机把LCD 1602的实验完成了&#xff0c;那个电路图有几个地方没弄懂&#xff0c;但是去掉也没有报错&#xff0c;就没管了。 LCD1602_百度百科 (baidu.com)https://baike.baidu.com/item/LCD1602/6014393?frge_ala LCD1602液晶显示屏通过电压来改变填充在两块平行板之…