c++习题31-阶乘和

news2024/12/23 18:17:37

目录

一,题目 

二,思路 

三,代码


一,题目 

描述

用高精度计算出 S=1!+2!+3!+…+n!(n≤50),其中“!”表示阶乘,例如:5!=5×4×3×2×1。

输入正整数n,输出计算结果S。

输入描述

一个正整数n。

输出描述

计算结果S。

用例输入 1 

5

用例输出 1 

153

二,思路 

  1. 先产生阶乘:1!,2!,3!,4!,5!...n!,生成阶乘相关的代码请参考下面的文章👇
    c++习题30-求10000以内N的阶乘-CSDN博客
  2. 产生每一次的阶乘之后,要将结果保存起来,这个时候就需要对之前文章中的代码进行修改:
    1) 最外层的控制阶乘个数的循环不变,内层需要有两个并列的循环,前一个循环用于产生阶乘数值,后一个循环将每一次的阶乘数值相加。
    2)存储每一次阶乘数值的容器变量 r,声明在控制阶乘个数的循环和求阶乘数值的循环中间(每一次的阶乘数值都不一样需要重新定义,而在求阶乘数值的时候不需要重新定义,之前的结果要参与运算)。
    3)由于阶乘最大可以是50的阶乘(n<=50),而50的阶乘有60+的位数,因此需要一个可以存储这个大整数的数据类型,建议选择整型的vector容器会比较方便。因为是用来存储输出结果的容器变量 s ,所以需要将容器变量 s 声明在外层for循环的前面,用于最后的输出。
    4)对阶乘数值进行相加求和(因为是对存储在容器变量r中的阶乘数值累加,所以需要遍历容器变量r)即 for (int j = 0; j < r.size() ; j++):
    ① 将两个vector容器中的元素对应相加时需要注意的是,两个vector容器要能够相加需要大小一致,因此需要在大小较短的vector容器后面填充0,来保证它们的大小一致。
    如果存储阶乘数值的容器r的大小比存储求和结果的容器 s 大,那么需要在容器的后面补0:
    即 if (j == s.size()) s.push_back(0);
    ② 在相加的会有进位,因此,之前阶乘用到的存储进位和个位以上的数位的变量 c 还需要用到,可以将变量 c的作用域变大,让后面的语句块也可以识别到并使用。并且,如果遍历完整个容器 r 之后,还有进位,需要再进行一次运算,那么就需要在将之前遍历容器r的语句进行修改:for (int j = 0; j < r.size() || c; j++) 。a||b:只要其中一个不为0,结果就为1,需要继续执行语句。
    ③ 在第①步中已经考虑了“存储阶乘数值的容器r的大小比存储求和结果的容器 s 大”的情况,这一步需要考虑到“有进位c”的情况,此时容器r中被赋值(被初始化)的元素已经遍历完,后面的元素都未被初始化,元素值随机,因此,将容器 r 和容器 s中的元素一一对应相加时,需要给个判断,如果j<r.size(),此时,容器 r 中对应的元素被初始化过,可以写成:s\left [ j \right ]+r\left [ j \right ]+c,如果j>r.size(),此时容器 r中对应的元素未被初始化,需要指定该元素的值为0,可以写成:s\left [ j \right ]+0+c,使用三元运算符将上面的两个代码整合在一起:
    s\left [ j \right ]+(j\leq r.size()?r[j]:0)+c
    接着将结果赋值给一个整型变量 t
    ④ 通过上一步,得到两个容器的某一个数位相加的结果,之后将 变量 t 的个位放到存储求和结果的容器 s中,即 s[j] = t % 10;,接着让变量 c 存储数位在个位以上的数 c = t / 10;(因为是在循环里面,所以会一直运行到c==0 及 遍历完容器 r 为止,保证将数据都存储到容器s中)
  3. 最后倒序输出容器 s中的元素就行。

三,代码

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int n;
	cin >> n;
	vector<int> s(1, 0);
	for (int i = 1; i <= n; i++)
	{
		vector<int> r(1, 1);
		int c = 0;
		for (int j = 1; j <= i; j++)
		{
			c=0;
			for (int k = 0; k < r.size(); k++)
			{
				int t = r[k] * j + c;
				r[k] = t % 10;
				c = t / 10;
			}
			while (c)
			{
				r.push_back(c % 10);
				c /= 10;
			}
		}
		c = 0;
		for (int j = 0; j < r.size() || c; j++)
		{
			if (j == s.size()) s.push_back(0);
			int t = s[j] + (j < r.size() ? r[j] : 0) + c;
			s[j] = t % 10;
			c = t / 10;
		}
	}
	for (int i = s.size() - 1; i >= 0; i--)
	{
		cout << s[i];
	}
	return 0;
}

有问题请在评论区留言或者是私信我,回复时间不超过一天。

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

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

相关文章

微信公众号管理系统-需求整理

微信公众号管理系统-需求整理 文章目录 一、拟开发功能1.公众账号管理(必须)2.菜单管理(必须)2.1 跳转网页(view)2.2 发送消息(media_id)2.3 永久素材管理2.4 打开指定小程序(miniprogram)2.5 自定义点击事件(click)3.权限控制(必须)二、参与人员三、开发周期四、环境及…

二叉树的层序遍历-广度优先遍历

正常来讲二叉树的层序遍历 我们 使用递归 &#xff0c;来进行 就可以得到正确答案&#xff0c;但是有时候递归比较难以理解&#xff0c;我们今天用队列的形式 来进行二叉树的层序遍历 我们使用队列对二叉树进行层序遍历的核心思想有两个 1. 我们用队列 记录二叉树每一层的…

240908-结合DBGPT与Ollama实现RAG本地知识检索增强

A. 最终效果 B. 背景说明 DBGPT在0.5.6版本中开始支持Ollama&#xff1a;v0.5.6 版本更新 网友对其Web端及界面端的设置进行了分享&#xff1a; feat(model): support ollama as an optional llm & embedding proxy by GITHUBear Pull Request #1475 eosphoros-ai/DB-G…

【新手必看】Windows 上安装 Minio及简单使用

一&#xff0c;minio是什么&#xff1f; MinIO 是一个高性能、分布式的对象存储系统&#xff0c;专门用于存储大量非结构化数据&#xff0c;例如图片、视频、日志文件、备份等&#xff0c;且一个对象文件可以是任意大小&#xff0c;从几kb到最大5T不等。Minio是一个非常轻量的服…

【数学建模】2024年国赛成绩公布时间预测

经过三天三夜的奋战&#xff0c;2024年数学建模国赛也宣告结束&#xff0c;相信这几天超高强度的比赛也让大家精疲力竭了&#xff0c;所以经过几天的调整&#xff0c;大家都恢复过来了吧。能够在高强度的压力下坚持这么久&#xff0c;大家都超级厉害的&#xff01; 当然完整提交…

如何更好地解释你的想法并说服他人

这篇内容讨论了如何更有效地解释你的思想和想法&#xff0c;并说服他人。提出了几个原则和策略&#xff0c;如意想不到、简单性、具体化、故事性和情感。 中文 1 我最近读了一本关于有效沟通的书&#xff0c;名为《让你的想法更具说服力》&#xff08;《创意黏力学》&#x…

僵尸网络开发了新的攻击技术和基础设施

臭名昭著的 Quad7 僵尸网络&#xff08;也称为 7777 僵尸网络&#xff09;不断发展其运营&#xff0c;最近的发现表明其目标和攻击方法都发生了重大变化。 根据 Sekoia.io 的最新报告&#xff0c;Quad7 的运营商正在开发新的后门和基础设施&#xff0c;以增强僵尸网络的弹性&a…

ISAC: Toward Dual-Functional Wireless Networks for 6G and Beyond【论文阅读笔记】

此系列是本人阅读论文过程中的简单笔记&#xff0c;比较随意且具有严重的偏向性&#xff08;偏向自己研究方向和感兴趣的&#xff09;&#xff0c;随缘分享&#xff0c;共同进步~ Integrated Sensing and Communications: Toward Dual-Functional Wireless Networks for 6G and…

让人物照片跳舞vigen追影

本质上是一种视频换脸技术的升级版&#xff0c;视频换身。 项目体验地址&#xff1a;》》》魔搭社区《《《 选择“创作视频” 1.上传一张全身照片 2.选择一个包含动作的视频 3.点击“开始生成” 看效果 dreamoving-v1-2024-09-08-1000017-888139-result 动作的表现力还是很惊…

通过Docker实现openGauss的快速容器化安装

容器安装 本章节主要介绍通过 Docker 安装 openGauss&#xff0c;方便 DevOps 用户的安装、配置和环境设置。 支持的架构和操作系统版本 x86-64 CentOS 7.6 ARM64 openEuler 20.03 LTS 配置准备 使用 buildDockerImage.sh 脚本构建 docker 镜像&#xff0c;buildDockerIm…

【EI稳定,马来亚大学主办】2024年计算机与信息安全国际会议(WCCIS 2024,9月27-29)

2024年计算机与信息安全国际会议 (WCCIS 2024) 将于2024年9月27-29日召开。 会议旨在为从事计算机与信息安全的专家学者、工程技术人员、技术研发人员提供一个共享科研成果和前沿技术&#xff0c;了解学术发展趋势&#xff0c;拓宽研究思路&#xff0c;加强学术研究和探讨&…

动态规划(算法)---02.斐波那契数列模型_三步问题

题目链接&#xff1a; 面试题 08.01. 三步问题 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/three-steps-problem-lcci/description/ 一、题目解析 题目&#xff1a; 题目讲解&#xff1a; 我们先举例查看规律&#xff1a; 第一台阶&#xff1a;我…

鸿蒙OS 概述

鸿蒙OS 系统定义 HarmonyOS 是一款“面向未来”、面向全场景&#xff08;移动办公、运动健康、社交通信、媒体娱乐等&#xff09;的分布式操作系统。在传统的单设备系统能力的基础上&#xff0c;HarmonyOS 提出了基于同一套系统能力、适配多种终端形态的分布式理念&#xff0c…

《食品界》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问&#xff1a;《食品界》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊。 问&#xff1a;《食品界》级别&#xff1f; 答&#xff1a;国家级。主管单位&#xff1a; 中国商业联合会 主办单位&#x…

【Hot100】LeetCode—62. 不同路径

目录 1- 思路题目识别动规五部曲 2- 实现⭐62. 不同路径——题解思路 3- ACM 实现 原题链接&#xff1a;62. 不同路径 1- 思路 题目识别 识别1 &#xff1a;给一个二维矩阵&#xff0c;每次只能向下或者向右移动一步识别2&#xff1a;求解到达最右下角的路径数。 动规五部曲…

Ubuntu WSL使用技巧

0 Preface/Foreword 1 默认为root用户 当下载完成Ubuntu之后&#xff0c;首次登录&#xff0c;当完成初始化后&#xff0c;提示输入新的用户名时候&#xff0c;直接点击右上角的X按钮&#xff0c;再重新登陆&#xff0c;系统会默认使用root权限登录。 2 root用户和普通用户切换…

力科示波器桌面分析远程控制软件

软件在这里下载&#xff1a;Teledyne LeCroy - MAUI Studio - Remote and Offline PC Analysis Software for an Oscilloscope 我去年因为要分析示波器波形&#xff0c;下载过它的MAUI Studio。它的免费版需要逐年注册。注册是免费的。示波器从业人员和工程技术人员可以看看示…

基于微信小程序的鲜花销售系统设计与实现毕业设计-附源码

鲜花销售系统|鲜花销售系统源码|鲜花销售小程序|基于微信小程序的鲜花销售系统设计与实现 鲜花销售系统源码&#xff1a;鲜花销售微信小程序具有鲜花销售信息管理功能的选择&#xff0c;鲜花销售微信小程序采用java技术&#xff0c;基于mysql开发&#xff0c;实现了首页、个人…

企业常用的源代码加密软件有哪些?10款源代码加密软件推荐

在现代企业中&#xff0c;源代码保护变得尤为重要&#xff0c;因为源代码不仅是软件的核心资产&#xff0c;还可能包含商业秘密和知识产权。因此&#xff0c;许多企业都在寻找合适的源代码加密软件来保护其代码的安全性。本文将为您介绍10款常用的源代码加密软件&#xff0c;帮…

4款工具搞定固态硬盘数据恢复!一起来看看!

数据丢失&#xff0c;这可能是每个电脑用户都曾遇到过的噩梦。今天&#xff0c;我就来聊聊我亲身体验过的四款数据恢复软件&#xff0c;看看它们在帮我从硬盘的“深渊”中捞回宝贵数据时的表现如何呢&#xff1f;一起来看看吧&#xff01; 一、福昕数据恢复 网址&#xff1a;h…