n!有什么好的算法否
第一次发贴,如题。
编了一个大数的阶乘程序。算1000!很快,算2000!就要几秒了。而10000!简直不能算,都挂了几个小时了。
PS:pc cpu 为p41.8G
[解决办法]
http://blog.csdn.net/akirya/archive/2007/04/19/1570146.aspx
10000! 在几秒之内能算出来
[解决办法]
//貌似只要3000毫秒左右...这个算法并不咋的#include <stdio.h>#include <string.h>#include <windows.h>typedef struct num{ int data[10000]; int len;} NUM;void jc(NUM* sj, int n){ int i = 0, j = 0, temp = 0, inc = 0; int len = 0; memset(sj, 0, sizeof(NUM)); sj->data[0] = 1; for (i = 1; i <= n; i++) { for (j = 0; j <= len; j++) { temp = sj->data[j]*i + inc; sj->data[j] = temp%100000; inc = temp/100000; } if (inc) len++, sj->data[j] = inc, inc = 0; } sj->len = len;}int main(){ long n, i, l; NUM rst; DWORD dwStart = GetTickCount(); scanf("%d", &n); jc(&rst, n); printf("%ld\n", GetTickCount()-dwStart); /* printf("%d!=", n); for (l = rst.len; l >= 0; l--) printf("%05d", rst.data[l]); printf("\n"); */ return 0;}