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;
}

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

相关推荐
彷徨而立7 分钟前
【C/C++】多线程读写普通 int 变量的一些问题(二)
c语言·c++
一只旭宝11 分钟前
五种线程池设计
c++·笔记
luj_176815 分钟前
毒素驱动的生物自毁机制探析
服务器·c语言·开发语言·经验分享·算法
某林21218 分钟前
机器人收不住、转不动?执行器死区的原理与三层补偿设计
前端·网络·c++·架构·机器人
海兰23 分钟前
【 Python 量化交易】第6章:数据可视化
开发语言·python·信息可视化
多多鼠24 分钟前
Tool Calling的信任边界:从协议校验到执行沙箱的完整链路设计
运维·开发语言·网络·人工智能·python·langchain
啊阿狸不会拉杆27 分钟前
《计算机网络-自顶向下方法》1.5 协议层次及其服务模型 读书笔记
开发语言·计算机网络·php
一水鉴天28 分钟前
问题分类的三元组映射体系与求解方法论 20260901(千问)
人工智能·算法·机器学习
breeze jiang29 分钟前
LangChain Memory 实战:用 InMemoryChatMessageHistory 管理多轮对话
前端·算法·langchain
tryxr33 分钟前
Chat2Excel 项目通用服务开发
java·开发语言·excel·java项目开发