千里之行,始于足下
题目描述
给定一个整数N(0≤N≤10000),求取N的阶乘
输入描述:
多个测试数据,每个测试数据输入一个数N
输出描述:
每组用一行输出N的阶乘
示例1
输入
1
2
3
输出
1
2
6
问题分析
这里我们在解决这个问题的时候很容易忽视一点,就是求阶乘的数越大,最后算出的结果就越长,结果的长度远远超出我们的意料!
最终你会发现,对于后面数的阶乘,c/c++中所有的类型都无法存储这个数的结果,那怎么办呢?
我们可以使用数组,数组的每个元素来存储数中的每个位数,而数组的长度可以远远容纳数的位数,知道了这一点,我们对数存储的问题就有了方案了。
解决方法
原本是更长的代码,如果直接把代码丢过来,我担心大家会头晕😄,为此,我把许多逻辑相近的地方都浓缩了一下,变量也是设置得见名知意,代码格式也根据标准做了调整,现在的核心代码就只有几行了,现在的代码页面看起来更加清晰易懂
#include<bits/stdc++.h>
using namespace std;
int main(){
int num[100000],jinwei,chengji,k,n;
//其中k用于记录最高位
while(~scanf("%d",&n)){
k=1;
num[1]=1;
for(int i=1;i<=n;i++){//枚举因式中的每一个因子
jinwei=0;//每次相乘刚开始没有进位,所以要赋值零
for(int j=1;j<=k;j++){
chengji=num[j]*i+jinwei;
jinwei=chengji/10;
num[j]=chengji%10;
}
while(jinwei){//进位处理
num[++k]=jinwei%10;
jinwei/=10;
}
}
for(int i=k;i>=1;i--){
cout<<num[i];
}
cout<<endl;
}
}
补充说明:
while(~scanf("%d", &n)) 意思就是当有值输入的时候,进入while,当没有值输入时就结束while。
好了,今天的分享到此结束了
至此希望能够给你带来帮助(#^.^#)


本文介绍了解决大整数阶乘计算问题的方法,通过使用数组存储每位数字,有效避免了溢出。作者简化了代码逻辑,详细展示了如何使用C++实现对输入整数N的阶乘计算并输出结果。
397

被折叠的 条评论
为什么被折叠?



