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

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

相关推荐
2401_8390805412 小时前
C++常见八股
数据结构·c++·算法
qq_1998868713 小时前
第6板块 第2节 CUDA运行时API与驱动API 核心笔记
c++·人工智能·gpu算力
青山是哪个青山13 小时前
LeetCode 188:买卖股票的最佳时机 IV
算法
a1879272183113 小时前
【算法】树(二):队列与祖先——BFS 骨架三配件、短路透传与合流
算法·leetcode·二叉树··bfs·算法讲解·树遍历
syagain_zsx13 小时前
算法基础篇 · 03 枚举(C++ 题解)
c++·算法·二进制·枚举
weixin_3077791314 小时前
C++代码实现MATLAB中的ode23tb函数功能
开发语言·c++·算法·matlab
2601_9669496514 小时前
为什么量化回测中 for 循环比 DataFrame 慢三个数量级?从向量化原理讲起
开发语言·python·pandas·股票数据·quantdash
S_WEAN14 小时前
C++STL - string类的模拟实现
c++
S_WEAN15 小时前
【C++】STL - string类
c++
我是章汕呐15 小时前
地级市能源消耗量及消耗强度数据【2006-2023年】平衡面板
人工智能·经验分享·算法·回归