题目描述
输入一个正整数N,输出N的阶乘。
输入描述:
正整数N(0<=N<=1000)
输出描述:
输入可能包括多组数据,对于每一组输入数据,输出N的阶乘
示例1
输入
复制
4 5 15
输出
复制
24 120 1307674368000
题目解析:本题的算法非常简单,主要需要解决的问题就是大数相乘时,需要防止内存泄漏的问题。因此在本题中我们采用一个数组来存储答案。
代码实现:
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <iostream>
using namespace std;
#define N 3000
long ans[N];
void rest()
{
for(int i=0;i<N;i++)
{
ans[i]=0;
}
}
void adjust_arry()
{
for(int i=0;i<N-1;i++)
{
if(ans[i]>10)
{
int temp=ans[i]/10;
ans[i]=ans[i]%10;
ans[i+1]+=temp;
}
}
}
int main()
{
int n;
while(~scanf("%d",&n))
{
rest();
int i=0;
int j=0;
ans[0]=1;
for(i=1;i<=n;i++)
{
for(j=0;j<N;j++)
{
ans[j]=ans[j]*i;
}
adjust_arry();
}
bool flog =false;
for(j=N-1;j>=0;j--)
{
if(ans[j]!=0)
flog=true;
if(flog)
cout<<ans[j];
}
cout<<endl;
}
}