求算大數(比如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比較大的時候,這種方法方...