问题 B: N的阶乘
时间限制: 1 Sec 内存限制: 32 MB
献花: 35 解决: 27
[献花][花圈][TK题库]
题目描述
输入一个正整数N,输出N的阶乘。
输入
正整数N(0<=N<=1000)
输出
输入可能包括多组数据,对于每一组输入数据,输出N的阶乘
样例输入
0
4
7
样例输出
1
24
5040
注意点:
- 数组开大一点,不然跑不过,最开始开的1024跑不过
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <cstring>
#include <string>
using namespace std;
struct BigData
{
int data[4096];
int size;
BigData()
{
memset(data, 0, sizeof(data));
size = 0;
}
};
void Set(BigData & e, int va)
{
int idx = 0;
while (va)
{
e.data[idx++] = va % 10;
va /= 10;
}
e.size = idx;
}
void muti(BigData &e, int n)
{
int idx = 0 , tmp,carry=0;
while (idx < e.size)
{
tmp = e.data[idx] * n;
e.data[idx++] = (tmp + carry) % 10;
carry = (tmp + carry) / 10;
}
while (carry)
{
e.data[idx++] = carry % 10;
carry /= 10;
}
e.size = idx;
}
void Print(BigData e)
{
int idx = e.size - 1;
while (idx >= 0)
{
printf("%d", e.data[idx--]);
}
}
int main()
{
#ifdef _DEBUG
freopen("data.txt", "r+", stdin);
#endif // _DEBUG
int N;
BigData e;
while (cin >> N)
{
Set(e, 1);
for (int i = 2; i <= N; ++i)
muti(e, i);
Print(e);
printf("\n");
}
return 0;
}
/**************************************************************
Problem: 1917
User: Sharwen
Language: C++
Result: 升仙
Time:24 ms
Memory:1708 kb
****************************************************************/