C++實現(xiàn)10000的階乘的代碼

字號:

寫的一個C++實現(xiàn)10000的階乘的代碼
    #include
    #define N 10000//設(shè)階乘數(shù)為10000
    #define SIZE 40000//預(yù)留40000位保存結(jié)果
    using namespace std;
    void mul(int *n1,int n2)//兩數(shù)相乘
    {
    for(int i=0;i!=SIZE;++i)
    n1[i]*=n2;
    for(int i=0;i!=SIZE;++i){
    n1[i+1]+=(n1[i]/10);
    n1[i]%=10;
    }
    }
    int main()
    {
    int *num=new int[SIZE];
    memset(num,0,SIZE);
    num[0]=1;
    //N的階乘
    for(int i=1;i!=N+1;++i){
    mul(num,i);
    }
    //輸出時排除開頭的0
    for(int i=SIZE-1;i!=-1;--i){
    if(0!=num[i]){
    for(int j=i;j!=-1;--j){
    cout <    }
    break;
    }
    }
    delete[] num;
    return 0;
    }
    這個是第一版,很多地方不合理,尤其是需要預(yù)留空間,這就要我先預(yù)算一下會有多少位了。運(yùn)算時間20秒左右,效率也不行,應(yīng)該在10秒左右比較合理,機(jī)器為P3 733,內(nèi)存256MB。