N!
Problem Description
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
/*
*求N!,即求N的阶乘,N最大为10000,大数求积
*(他人代码借鉴所得)
*/
#include<iostream>
using namespace std;
int main()
{
//数组a中存放相乘的结果,设为100000位
int a[100000];
//n中负责接收需进行阶乘的数字,i,j,k为方便运算而使用的变量
int i,j,k,b,c,n;
//使用while循环,进行循环运算,当n有输入且n大于等于0时循环继续
while(cin>>n&&n>=0)
{
//每次运算前通过memset函数对数组a清零处理
memset(a,0,100000*sizeof(int));
//a[0]作为底数需要赋值为1,以便于之后的运算以及n等于0的情况
//k负责记录目前乘积结果的最大位数,因此每次运算前也要赋值为1
a[0]=1;k=1;
//当n为0或1时阶乘的结果都是1,所以当n大于1时采用n以内的for循环进行阶乘运算
for(i=2;i<=n;i++)
{
//用于进位运算的变量n每一次乘法前都要清零处理
c=0;
//在最高位k以内进行乘法运算
for(j=0;j<k;j++)
{
//b作为运算中间值寄存器使用
b=a[j]*i+c;
//每一次单步运算后都要进行进位处理,所进位数存放在c中,如上一步所示,下一次for循环中在下一位参与运算
a[j]=b%10;
c=b/10;
}
//for循环完毕后如最高位仍有进位,通过while循环进行持续进位处理,直到再无进位
while(c)
{
//进位处理,同时k进行最高位位数记录
a[k++]=c%10;
c/=10;
}
}
//按照数组输出规则从高位进行输出
for(i=k-1;i>=0;i--)
{
cout<<a[i];
}
cout<<endl;
}
return 0;
}