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

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

相关推荐
测试_AI_一辰3 分钟前
AI Agent 评测最隐蔽的坑-记忆
人工智能·算法·ai·自动化·ai编程
躺不平的理查德4 分钟前
Windows C++ 第三方库使用流程备忘录--OpenCV
开发语言·c++
余额瞒着我当琳10 分钟前
C++STL容器string--迭代器,string的接口,string的遍历,访问方式
c++
郭涤生12 分钟前
rootfs 详解与裁剪优化记录
linux·c++·bsp
lucas_AI12 分钟前
给YOLO检测器插 LoRA,'插对地方'比'插什么'更要命
人工智能·算法
菜冻鱼19 分钟前
Python-sklearn-评估指标
开发语言·人工智能·python·机器学习·numpy·pandas·sklearn
你挚爱的强哥32 分钟前
【exportExcel】单纯靠js不用任何其他第三方插件导出xls格式文件
开发语言·javascript·ecmascript
LuminousCPP41 分钟前
数据结构-时间与复杂度|时间/空间复杂度 + 两道力扣练习 + 二分查找复盘
c语言·数据结构·经验分享·算法·leetcode
Nil20844 分钟前
leetcode 三数之和
数据结构·算法·leetcode
Hello_Damon_Nikola1 小时前
AC7911从入门到精通
开发语言·嵌入式硬件·物联网·php