问题描述
求一个数的阶乘
输入格式
输入整数N
输出格式
一行输出其阶乘
样例输入
10
样例输出
3628800
数据规模和约定
50%的数据N<=500
100%的数据N<=1000
对于这种问题,输出结果往往很大很大,所以我们可以采用“万进制”来解决
直接看代码吧
#include<bits/stdc++.h>
using namespace std;
int d[2000]={0};
int main(){
int n,jw=0; //jw是进位
cin>>n;
d[0]=1;
for(int i=1;i<=n;i++){
int count=0;
for(int j=0;j<=jw;j++){ //保证每一位都能乘到i(这里不懂的,可以去搜下为什么)
d[j]=d[j]*i+count; //+count是中间溢出的话,直接加到下一位上
count=d[j]/10000; //看看有无溢出
d[j]%=10000; //保证万进制
}
if(count>0){
d[++jw]=count; //如果count溢出,那就进一位
}
}
//倒着输出
cout<<d[jw]; //先输出最大的
for(int i=jw-1;i>=0;i--) cout<<setw(4)<<setfill('0')<<d[i];
// setw(4)是输出4个宽度的字段,setfill('0')是用0填充不足4个字段的空白
}