求算大數(比如100)階乘的思路

2021-04-30 14:14:09 字數 1251 閱讀 6201

求算大數(比如100)階乘的思路

/*

可以把n!的結果放在陣列中,陣列中每個元素都表示n!值的一位.

對整數範圍內的n,求n!.

對於輸入的n想辦法晝精確地估計出n!所佔的位數.就能確定陣列元素的個數

可以將n!表示成10的次冪,即n!=10^m(10的m次方)則不小於m的最小整數就是

n!的位數,對該式兩邊取對數,有=log10^n!即:

m = log10^1+log10^2+log10^3...+log10^n

迴圈求和,就能算得m值,該m是n!的精確位數。

陣列初始化時,令陣列第乙個元素(n!的第一位)為整數1,其餘為0.

在陣列中計算n!時是通過將陣列中的值乘2,3,4,。。一直到乘n的方式得的

把陣列的第乙個元素看做是n!的最低位,最後乙個元素看做是最高位。

*/#include ;

using namespace std;

#include ;

#include ;

#include ;

int getn();//輸入n

int getbitnum(int n);//求n!的位數

char *init(int size);

void calc(char *a,int n);//求n!

void display(char *a,int size);

int main()

int getn()

if(n == 0)

exit(1);

return n;

}int getbitnum(int n)

char * init(int size)

pa[0] = 1;

for(int i=1; i//源為long and=0;由於and是c++關鍵字,所以出錯。

//故所有為add的源文為and.不小心的出錯點。

bitcount += log10((long double)i);

if(a[begin] == 0)

begin++;

for(int j=begin; j;=0; i--)

cout << endl;

}

求100的階乘

這個問題其實並不難,主要是要採用合理的資料結構。我用的是陣列,int mul 1000 並將每個元素限定在 unit 100 即 100 進製。效率的確是有待改進,不過除非你要算宇宙的大小,否則耗時可以忽略不計。關鍵是簡短易懂,可移植。1 include stdio.h 23 define unit...

c語言求大數階乘,10000的階乘

10000以內階乘,在c語言中沒有型別可以以儲存這麼大的數,所以我們可以用陣列來存它,int a 10005 這裡10005只是習慣,當然,也可以用斯特靈公式來算a陣列的大小 下面附上 題解請看 注釋,include int a 100000 int main 這層迴圈使得a陣列每個數都是個一位數 ...

求大數的階乘有多少位

可設想n 的結果是不大於10的m次冪的數,即n 10 m 10的m次方 則不小於m的最小整數就是 n 的位數 對 該式兩邊取對數,有 m log10 n 即 m log10 1 log10 2 log10 3.log10 n 迴圈求和,就能算得m值,該m是n 的精確位數。當n比較大的時候,這種方法方...