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

news2024/11/25 4:38:01

题目:

从键盘输入一个值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; //输入n
	int 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; //输入n
	int 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; //输入n
	int 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; //输入n
	int 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; //输入n
	int 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; //输入n
	int ret = 1; //把每个数的阶乘计算后赋值给该变量,因为0乘任何数都为0,所以初始化为1。
	int sum = 0; //外循环后将各个数的阶乘相加后赋值给该值,作为最终结果。

	//输入:
	scanf("%d", &n);//记得使用取地址符:&

	//实现代码:
	for (i = 1; i < n; i++) //外循环:实现阶乘相加,相加到 n!
	{
		ret = ret * i;//依次相乘再赋值给变量ret
		

		sum += ret; //将各数的阶乘相加后赋给该值
	}

	return 0;
}

实现图片:

                    

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

最终代码:

#include <stdio.h>
int main()
{
	int i = 0; //循环变量
	int n = 0; //输入n
	int ret = 1; //把每个数的阶乘计算后赋值给该变量,因为0乘任何数都为0,所以初始化为1。
	int sum = 0; //外循环后将各个数的阶乘相加后赋值给该值,作为最终结果。

	//输入:
	scanf("%d", &n);//记得使用取地址符:&

	//实现代码:
	for (i = 1; i < n; i++) //外循环:实现阶乘相加,相加到 n!
	{
		ret = ret * i;//依次相乘再赋值给变量ret
		

		sum += ret; //将各数的阶乘相加后赋给该值
	}

	//打印:
	printf("%d\n", sum);

	return 0;
}

实现效果:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Stable Diffusion 从听说到超神日记

1.安装模型&#xff08;B站搜秋叶&#xff09; 2.下载模型&#xff0c;安装好的界面有模型下载 有了上面模型已经可以根据模型风格去生成一些照片了 3.使用Additional Networks/lora模型 模型大多都是继承了很多网友自行训练的图库模型&#xff0c;各类风格都有&#xff01; …

分享一个卡通人物

这几天较忙&#xff0c;像它一样&#xff1a; 代码在这里&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>卡通打字</title><script src"https://s3-us-west-2.amazonaws…

《MySQL(五):基础篇- 多表查询》

文章目录 5. 多表查询5.1 多表关系5.1.1 一对多5.1.2 多对多5.1.3 一对一 5.2 多表查询概述5.2.1 数据准备5.2.2 概述5.2.3 分类 5.3 内连接5.4 外连接5.5 自连接5.5.1 自连接查询5.5.2 联合查询5.6.2 标量子查询5.6.3 列子查询5.6.5 表子查询 5.7 多表查询案例 5. 多表查询 我…

【Sql】根据字段分组排序,取其第一条数据

【Sql】根据字段分组排序&#xff0c;取组内第一条数据 【一】问题描述【二】解决方案&#xff08;oracle和mysql都可用&#xff09;【三】总结 【一】问题描述 &#xff08;1&#xff09;问题描述 有时候我们需要对数据进行去重处理&#xff0c;例如查询结果里的文件名有重复…

常用模拟低通滤波器的设计——契比雪夫I型滤波器

目录 常用模拟低通滤波器的设计——契比雪夫I型滤波器 1、cheb1ap 函数 2、cheb1ord 函数 3、cheby1函数 4、实例演示 常用模拟低通滤波器的设计——契比雪夫I型滤波器 巴特沃斯滤波器的频率特性曲线在通带和阻带内&#xff0c;幅度特性是单调下降的&#xff0c;如果阶次一…

RISC-V体系结构的U-Boot引导过程

RISC-V体系结构的U-Boot引导过程 flyfish BootLoader Boot是Bootstrap&#xff08;鞋带&#xff09;的缩写&#xff0c;它来自于一句谚语&#xff1a;“Pull oneself up by one’s own bootstraps”&#xff0c;直译的意思是“拽着鞋带把自己拉起来” 干这件事&#xff0c;得…

文心一言 VS 讯飞星火 VS chatgpt (33)-- 算法导论5.2 5题

五、设A[1…n]是由n个不同数构成的数列。如果i<j且A[i]>A[j]&#xff0c;则称(i&#xff0c;j)对为A的一个逆序对(inversion)。(参看思考题2-4 中更多关于逆序对的例子。)假设A的元素构成(1&#xff0c;2&#xff0c;… &#xff0c;n)上的一个均匀随机排列。请用指示器随…

Win11配置Anaconda-Cuda-Pytorch-Tenserflow环境

之前搞了一个月左右时间用WSL2跑模型&#xff0c;后来发现还是不太习惯&#xff08;其实用不明白&#xff09;&#xff0c;就转成Windows了。这次也是记录一下自己配环境的过程&#xff0c;以免下次还需要 安装Anaconda 下载方式 Anaconda官网清华镜像下载 tip&#xff1a;…

OpenHarmony源码解析(11): hiview维测平台

作者: 鸿湖万联(武汉) 许文龙 1、概述 Hiview是一个跨平台的终端设备维测服务集,由插件管理平台和基于平台上运行的服务插件来构成整套系统。Hiview维测服务是由HiSysEvent事件驱动的,其核心为分布在系统各处的HiSysEvent桩点,格式化的事件会通过HiSysEvent打点API上报至H…

Tomcat【尚硅谷】

一、Tomcat基础 1、常见的web服务器 概念 服务器&#xff1a;安装了服务器软件的计算机服务器软件&#xff1a;接收用户的请求&#xff0c;处理请求&#xff0c;做出响应web服务器软件&#xff1a;在web服务器软件中&#xff0c;可以部署web项目&#xff0c;让浏览器来访问这…

【模块系列】DHT11时序理论

前言 基于stm32f103C6T6核心板STM32CubeMX的DHT11的使用。其实吧&#xff0c;要不是网上关于stm32调用DHT11的代码大多数用不了或者乱七八糟的&#xff0c;我也不想推时序的&#xff0c;嘎嘎麻烦。写着写着就发现&#xff0c;本章的篇幅有点长了&#xff0c;所以本文就先介绍DH…

Fiddler抓包返回的Response中总是出现“Response body is encoded. Click to decode. “的解决办法

在进行网页开发和接口调试时&#xff0c;我们经常会用到Fiddler这个工具。 但是&#xff0c;有时候我们会遇到一个非常头疼的问题&#xff0c;就是在抓取网页返回的Response时总是出现“Response body is encoded. Click to decode.”的提示。 这种情况下我们可能无法正常查看…

【Web服务应用】Nginx七层反向代理与四层反向代理

Nginx七层反向代理与四层反向代理 一、代理1.1什么是代理1.2正向代理1.3反向代理1.4反向代理的适用场景1.5正向代理与反向代理的区别 二、反向代理2.1负载均衡2.2动静分离 三、Nginx实战3.1七层反向代理&#xff0c;负载均衡&#xff0c;动静分离3.2四层反向代理 一、代理 1.1…

测试复习(自用)

测试复习 通识/基础/概念 什么是软件测试 验证软件特性是否满足用户的需求 专业名词 需求 满足用户期望或正式文档&#xff08;合同、标准、规范&#xff09;所具备的条件和权能&#xff0c;包含用户需求和软件需求 用户需求软件需求 是测试人员开展软件测试工作的依据 如…

【Mysql】基础入门篇

文章目录 什么是数据库见见数据库服务器、数据库、表之间的关系数据逻辑存储MySQL架构SQL分类存储引擎 什么是数据库 存储数据用文件就可以了&#xff0c;为什么还需要数据库&#xff0c;文件保存数据有以下几个缺点&#xff1a; 文件的安全性问题 文件不利于数据查询和管理 文…

五年后,你是什么档次

每晚一到两篇的阅读 1.认清现实&#xff0c;她就是喜欢钱 2.不要再找理由&#xff0c;自卑才是你最大的动力 3.提高自己的任性指数 4.尽量把钱花在有营养的地方 5.不要成为一条被溺死的鱼 6.总有一天&#xff0c;卫生纸比钞票值钱 7.穷忙的人&#xff0c;不要开Toyota 8.目标就…

easypoi模板导出文件,支持Liunx系统(自用)

springboot使用easypoi通过使用模板导出文件 第一步:导入poi以及easypoi的maven坐标 首先&#xff0c;easypoi是依赖于Apache的poi实现的&#xff0c;因此需要先引入poi <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifac…

智慧加油站解决方案,提高加油区和卸油区的安全性和效率

英码科技智慧加油站解决方案是一个综合应用了AI智能算法的视觉分析方案&#xff0c;旨在提高加油区和卸油区的安全性和效率。 加油区算法&#xff1a; 吸烟检测&#xff1a;通过AI算法分析视频流&#xff0c;检测是否有人在加油区域吸烟&#xff0c;以防止火灾风险。 打电话…

Web Scoket简述

Web Socket 简介 初次接触 Web Socket 的人&#xff0c;我们已经有了 HTTP 协议&#xff0c;为什么还需要另一个协议&#xff1f;它能带来什么好处&#xff1f; 因为 HTTP 协议有一个缺陷&#xff1a;通信只能由客户端发起。http基于请求响应实现。 &#xff08;准确来说HTTP…

使用Cloudflare Zaraz 可让同意管理变得简单明了

视您的居住地而定&#xff0c;在首次造访网站时&#xff0c;可能会要求您同意使用Cookie。如果您曾经点选过「核准」以外的其他选项&#xff0c;您就会注意到&#xff0c;关于应该或不应该允许哪些服务使用Cookie 的选项清单可能非常长。这是因为网站通常会整合许多第三方工具进…