输入不超过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操作符的用法。百度百科上解释的很详细:本随笔上转述