Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N!
Input
One N in one line, process to the end of file.
Output
For each N, output N! in one line.
Sample Input
1
2
3
Sample Output
1
2
6
提示:由于题目是大数之间的运算,所以int,long long是不行的。
见下面代码解释;
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int a[50000],n,i,j,k;
int main()
{
while(cin>>n)
{
memset(a,0,sizeof(a)); //初始化数组为0;
a[0]=1; //a[0]作为运算结果的位数;
a[1]=1;
for(i=2;i<=n;i++) //阶乘运算;
{
for(j=1;j<=a[0];j++)
a[j]=a[j]*i;
for(k=1;k<=a[0];k++)
{
if(a[k]>9) //如果位置数值大于9,需要再开一位;
{
if(k==a[0])a[0]++; //在>9的前提下,判断最大位数,即最大位数值是否超过9,yes的话,数值位增加一位;
a[k+1]=a[k]/10+a[k+1]; //进制 ;
a[k]=a[k]%10; //位数值;
}
}
}
for(i=a[0];i>1;i--)printf("%d",a[i]);printf("%d\n",a[1]);
}
return 0;
}