链接:https://www.nowcoder.com/acm/contest/75/E
来源:牛客网
题目描述
给定一个整数N(0≤N≤10000),求取N的阶乘
输入描述:
多个测试数据,每个测试数据输入一个数N
输出描述:
每组用一行输出N的阶乘
示例1
输入
1
2
3
输出
1
2
6
题解:用数组来存放阶乘值,具体看代码
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
int a[1000000];//存放阶乘值的数组
int main()
{
int n,i,j,len=0,t=0;//n为要求阶乘的数, len是当前数字长度,t是所求过程中的溢出值
while(cin>>n)
{
memset(a,0,sizeof(a));
t=0;
len=1;//初始长度为1
a[0]=1;
for(i=2;i<=n;i++)
{
for(j=0;j<len;j++)//逐位求值
{
int r=a[j]*i+t;
t=r/10;//其他位数字为溢出值
a[j]=r%10;//该位所求值的最小位放入数组
}
while(t)
{
a[len++]=t%10;//挨个取出溢出值中的最小位放入数组
t/=10;
}
}
for(i=len-1;i>=0;i--)//存储过程中小位数存在数组前端,倒着输出
{
cout<<a[i];
}
cout<<endl;
}
return 0;
}