第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

計算C中的大數(shù)階乘

計算C中的大數(shù)階乘

在我的C代碼中,我想為1到100范圍內(nèi)的數(shù)字計算階乘。對于較小的數(shù)字,該函數(shù)有效,但對于較大的數(shù)字,例如100!它返回錯誤的結(jié)果。在C中處理大數(shù)階乘的任何方法。我使用的編譯器是gcc v4.3.3。我的代碼如下:#include <stdio.h>#include <math.h>double print_solution(int);int main(void){        int no_of_inputs,n ;        int ctr = 1;        scanf("%d",&no_of_inputs); //Read no of inputs        do        {                scanf("%d",&n); //Read the input                printf("%.0f\n",print_solution(n));                ctr++;          }while(ctr <= no_of_inputs);        return 0;       }double print_solution(int n){        if(n == 0 || n == 1)                return 1;        else                return n*print_solution(n-1);}
查看完整描述

3 回答

?
人到中年有點甜

TA貢獻(xiàn)1895條經(jīng)驗 獲得超7個贊

100階乘是巨大的,確切地說是93326215443944944152681699238856266700490715968264381621468592963895217 59999322991560894146397615651828625369792082722375825118521091686400 00000000000000000000。


也許您應(yīng)該使用像GMP這樣的bignum庫。它具有出色的文檔,相當(dāng)一致的界面,速度,如果您使用的是Linux,則發(fā)行版中可能會有一個軟件包(我認(rèn)為我默認(rèn)安裝了該軟件包)


查看完整回答
反對 回復(fù) 2019-10-30
?
倚天杖

TA貢獻(xiàn)1828條經(jīng)驗 獲得超3個贊

如果您不想使用bigint庫,則使用stdlib最好的方法是使用long doubleand tgammal()from math.h:


long double fact(unsigned n)

{

    return tgammal(n + 1);

}

100!在x86上(即80 bit long double),這將為您提供18位小數(shù)的精度。


確切的實現(xiàn)也不是那么復(fù)雜:


#include <math.h>

#include <stdio.h>

#include <string.h>


void multd(char * s, size_t len, unsigned n)

{

    unsigned values[len];

    memset(values, 0, sizeof(unsigned) * len);

    for(size_t i = len; i--; )

    {

        unsigned x = values[i] + (s[i] - '0') * n;

        s[i] = '0' + x % 10;

        if(i) values[i - 1] += x / 10;

    }

}


void factd(char * s, size_t len, unsigned n)

{

    memset(s, '0', len - 1);

    s[len - 1] = '1';

    for(; n > 1; --n) multd(s, len, n);

}


int main(void)

{

    unsigned n = 100;

    size_t len = ceill(log10l(tgammal(n + 1)));

    char dstr[len + 1];

    dstr[len] = 0;

    factd(dstr, len, n);

    puts(dstr);

}


查看完整回答
反對 回復(fù) 2019-10-30
  • 3 回答
  • 0 關(guān)注
  • 787 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號