1172:求10000以内n的阶乘
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 15613 通过数: 3915
【题目描述】
求10000以内n的阶乘。
【输入】
只有一行输入,整数n(0≤n≤10000)。
【输出】
一行,即n!的值。
【输入样例】
4
【输出样例】
24
【来源】
No
提交 统计信息 提交记录
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
int a[50000]={1},len=1; // len 用于存放阶乘结果的位数,初始值为1
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++) // n的阶乘需运算n次
{
for(int j=0;j<len;j++) // 从len位之前每一位乘i
{
a[j]*=i;
}
for(int j=0;j<len;j++) // 处理len位之前的进位问题
{
if(a[j]>9) // 若本位满10
{
a[j+1]+=a[j]/10; // 下一位要加上进位
a[j]%=10; // 取模后得到本位上的数
if(j==len-1) len++; // 最后一位也满10 ,位数要累加
}
}
}
for(int i=len-1;i>=0;i--) // 倒序输出
{
cout<<a[i];
}
cout<<endl;
return 0;
}