读书人

n!有什么好的算法否解决办法

发布时间: 2012-03-17 19:06:28 作者: rapoo

n!有什么好的算法否
第一次发贴,如题。
编了一个大数的阶乘程序。算1000!很快,算2000!就要几秒了。而10000!简直不能算,都挂了几个小时了。
PS:pc cpu 为p41.8G

[解决办法]
http://blog.csdn.net/akirya/archive/2007/04/19/1570146.aspx
10000! 在几秒之内能算出来
[解决办法]

C/C++ code
//貌似只要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;} 

读书人网 >C语言

热点推荐