c++习题30-求10000以内N的阶乘

目录

一,题目

二,思路

三,代码


一,题目

描述

求10000以内n的阶乘。

输入描述

只有一行输入,整数n(0≤n≤10000)。

输出描述

一行,即n!的值。

用例输入 1

复制代码
4

用例输出 1

复制代码
24

二,思路

n n!

0 1

1 1*1=1

2 1*2=2

3 2*3=6

4 6*4=24

.

.

.

  1. 观察上述 n的阶乘,可以发现,当n==0时,对应的阶乘只有一个数字1,而其它数的阶乘结果都是前一项得到的结果乘上自己( n),因此,可以将n==0看成一个特殊项,将它提出来:如果n==0,那么就直接输出数字1就行。
  2. 当输入的n不是0而是1及1以上的数字时,可以按照输入的n来创建一个外层循环,用于处理要运算的次数,例如,当我输入的n=3时,程序需要执行3次才能够将结果计算出来:
    第一次:1*1=1;
    第二次:1*2=2;
    第三次:2*3=6;
    因此,循环变量 i 的初始值从1开始(因为n==0的时候就已经输出,这里只处理n>=1的输入),循环次数n次,即 i<=n (n-1+1=n)。
  3. 外层循环写完之后,就需要写一个内层循环用于处理阶乘运算过程中的数字:
    1) 需要将结果保存起来,用于最后的输出,因此需要定义一个存储结果的变量,由于 n≤10000 ,对应的阶乘是一个很大的整数,所以可以使用string类或者是vector容器来存储结果。因为在这道题中是输入的数小,计算过程中的数大,所以这里使用vector容器来存储要输出的结果。并且,vector容器 r 中一开始就有一个元素 1 (n==0时的值。虽然n==0作为特殊项输出了,但是它的值1还需要)即 vector<int> r(1,1);
  4. 接下来的操作和之前的之前的题目《c++习题28-计算2的N次方》一样,文章链接:c++习题28-计算2的N次方_c++算2的n次方-CSDN博客
    这里就不再赘诉。

三,代码

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

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

相关推荐
小徐不徐说13 小时前
数据库存储基础:理解表结构、主键、事务与 BLOB
开发语言·数据库·c++·qt·程序设计
Pniubi13 小时前
力扣46全排列(回溯(递归))
算法·leetcode·职场和发展
草莓熊Lotso14 小时前
【C++ 基于微服务的即时通讯系统】网关基建:cpp-httplib 与 WebSocketpp 从入门到实战
linux·开发语言·数据库·c++·redis·微服务·云原生
李纲明14 小时前
WordPress 媒体库上传失败或一直转圈:先核 PHP 上传限制与目录权限,再查安全插件与对象存储
运维·开发语言·安全·php·wordpress·媒体库·devdiy
第九序言T1 天前
Python 数据处理进阶(十八)批量处理同结构文件:一个文件夹一次跑完
开发语言·python·自动化·pandas·数据处理
Sakura_j_h_1 天前
EasyEDA PCB 快速设计Skills
c++·python·github
ZhengEnCi1 天前
Agent 架构怎么选:从单 Agent 到多 Agent 编排的选型决策指南
算法·架构
龙亘川1 天前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
程序喵大人1 天前
【C++入门】内存模型与资源管理 - 09 shared_ptr 和 weak_ptr 解决共享,也带来代价
开发语言·c++·资源管理·智能指针·内存模型
秋天的怀念_David1 天前
第二十二夜 · 数字迷雾
java·程序人生·算法