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

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

相关推荐
好好研究几秒前
Java基础学习(十三):IO流基础
java·开发语言·学习·io流
知识分享小能手8 分钟前
R语言入门学习教程,从入门到精通,R语言传统绘图系统 - 完整知识点与案例代码(2)
开发语言·学习·r语言
代龙涛13 分钟前
WordPress archive.php 分类与归档页面开发指南
开发语言·后端·php·wordpress
格林威14 分钟前
面阵相机 vs 线阵相机:堡盟与大恒相机选型差异全解析 附C++ 实战演示
开发语言·c++·人工智能·数码相机·计算机视觉·视觉检测·工业相机
黎阳之光15 分钟前
视频孪生赋能智慧能源园区:黎阳之光打造全域数智化新标杆
大数据·人工智能·算法·安全·数字孪生
xyq202417 分钟前
相邻节点迭代器
开发语言
YSF2017_318 分钟前
C语言15-makefile(2)——makefile的自定义变量及两个函数
c语言·开发语言
yyy(十一月限定版)18 分钟前
ACM&OJ最终选拔赛
算法
YaBingSec19 分钟前
玄机靶场—Apache-druid(CVE-2021-25646) WP
java·开发语言·笔记·安全·php·apache
少控科技21 分钟前
小数典应用:农场环境数据采集监控
开发语言·windows·c#