描述
输入一个正整数N,输出N的阶乘。
输入描述:
正整数N(0<=N<=1000)
输出描述:
输入可能包括多组数据,对于每一组输入数据,输出N的阶乘
示例1
输入
4
5
15
24
120
1307674368000
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
struct bigN{
int d[10000];
int len;
bigN(){
fill(d,d+10000,0);
len=0;
}
};
bigN multi(bigN a,int b){
bigN c;
int carry=0;
for(int i=0;i<a.len;i++){
int temp=a.d[i]*b+carry;
c.d[c.len++]=temp%10;
carry=temp/10;
}
while(carry!=0){
c.d[c.len++]=carry%10;
carry/=10;
}
return c;
}
/*bigN add(bigN a,bigN b){//大整数+低精度
bigN c;
int carry=0;
for(int i=0;i<a.len||i<b.len;i++){
int current=a.d[i]+b.d[i]+carry;
c.d[c.len++]=current%10;//先调用change函数反转,低位存余数
carry=current/10;//carry存进位
}
if(carry!=0){
c.d[c.len++]=carry;//加法只有可能进一位
}
return c;
}*/
bigN change(string str){
bigN n;
n.len=str.length();
for(int i=0;i<n.len;i++){
n.d[i]=str[str.length()-i-1]-'0';//反转
}
return n;
}
void Print(bigN a){
for(int i=a.len-1;i>=0;i--){///逆向输出
cout<<a.d[i];
}
// for(int i=0;i<a.len-1;i++){
// cout<<a.d[i];
// }
cout<<endl;
}
int main(void){
int n;
while(cin>>n){
bigN res;
res.d[0]=1;
res.len=1;
for(int i=n;i>=2;i--){
res=multi(res,i);
}
Print(res);
}
}