链接:
https://www.nowcoder.com/acm/contest/75/E
来源:牛客网
来源:牛客网
时间限制:C/C++ 3秒,其他语言6秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
给定一个整数N(0≤N≤10000),求取N的阶乘
输入描述:
多个测试数据,每个测试数据输入一个数N
输出描述:
每组用一行输出N的阶乘
Code:
#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;
}