输入不超过1000的正整数n,输出n!的精度结果。
样例输入:30
样例输出:265252859812191058636308480000000
#include<iostream>
#include<string.h>
using namespace std;
const int maxn = 3000;
int f[maxn];
void out(int f[])
{
int i, j;
for(j = maxn - 1; j >= 0; --j) if(f[j]) break;
for(i = j; i >= 0; --i) cout << f[i];
cout << endl;
}
void fact(int f[], int n)
{
out(f);
memset(f, 0, maxn);
//memset(f, 0, sizeof(*f)); //次数默认转化为指针,而非数组了
out(f);
f[0] = 1;
for(int i = 2; i <= n; ++i)
{
int c = 0;
for(int j = 0; j < maxn; ++j)
{
int t = f[j]*i + c;
c = t / 10;
f[j] = t % 10;
}
}
}
int main()
{
int n;
while(cin >> n)
{
//memset(f, 0, sizeof(f));
fact(f, n);
out(f);
}
return 0;
}
遇到一些问题:sizeof操作符的用法。百度百科上解释的很详细:本随笔上转述