题目:1172:求10000以内n的阶乘
题目描述
求10000以内n的阶乘。
输入
只有一行输入,整数n(0≤n≤10000)。
输出
一行,即n!的值。
时空限制
1s / 64MB
样例输入
4
样例输出
24
思路
普通的数组存储每一位过不去,于是采用压位,数组的每一位存三位数。只要在乘法中%1000、/1000即可。但是注意在输出时,除了最高位,其他位要补前导0。
代码
cpp
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int n;
vector<LL> A,C;
LL t;
int main() {
cin>>n;
A.push_back(1);
for(int i=2;i<=n;i++){
C.clear();
t=0;
for(int j=0;j<A.size();j++){
t+=1LL*A[j]*i;
C.push_back(t%1000);
t/=1000;
}
while(t){
C.push_back(t%1000);
t/=1000;
}
A=C;
}
cout<<A[A.size()-1];
//写法1:三个分支
for(int i=A.size()-2;i>=0;i--){
if(A[i]<10) cout<<"00"<<A[i];
else if(A[i]<100) cout<<"0"<<A[i];
else cout<<A[i];
}
//写法2:格式化输出
for(int i=A.size()-2;i>=0;i--){
printf("%03lld",A[i]);
}
return 0;
}
结果
