c++ 程式計算階乘(菜鳥級)
1樓:靈星飛雪
那倒不如弄個別的演算法,讓這個能算很大很大的數。
比如說定義個陣列,每個只存乙個一位數,比如data[100]乘過以後的進位就加到後面的數上面去,比如說6!
data[0]=1*2(data[0]=2)data[0]=2*3(data[0]=6)data[0]=6*4(data[0]=4 data[1]=2)data[0]=4*5 data[1]=2*5(data[0]=0 data[1]=2 data[2]=1)
data[0]=0*6 data[1]=2*6 data[2]=1*6(data[0]=0 data[1]=2 data[2]=7)
所以6!=720
定義多大就可以算多少位數的數。
我想了一下,這個演算法還湊合,呵呵,有什麼問題請指正。
2樓:網友
那是因為函式返回的型別是int型,int的最大值是65535,13的階乘超過了65535,你把函式的返回型別該為long就可以了。
3樓:網友
你所定義的f不應該是int;
應該定義unsigned long(無符號長型)函式的簽名也是改為 unsigned long fact(int n);
這樣就沒有問題了:
不然的話int已經是溢位了;
4樓:相蕩慈雅嫻
ifb<=n+1)
b=a+1;
y*=(a*b);
b++;a=b;
這裡的if語句出現問題;
if語句執行時到b++;a=b時就結束了;
並不會迴圈執行;
所以你的結果會是一直是2;
你應該用for迴圈語句;
5樓:網友
算到13時,結果就已經超過65535了,再加當然就變負數了。建議你再去看看有關補碼的知識。
c語言的求n的階乘的程式**
6樓:網友
int f(int n)
這個是經典的迭代程式例子。
7樓:晁以
#include
main()
printf("%d!=%d",n,j);
電腦驗證過,放心用吧!
8樓:老丁識途
這個簡單 哥們我來。
void main
9樓:擾龍雅琴
用個for迴圈就可以啦。
10樓:網友
①c語言的基本型別比如unsigned long int,甚至unsigned __int64型別 頂多也不超過2^64 大小。而50! 遠遠大於2^64,所以,c的基本型別滿足不了50以內階乘程式設計要求。
所以你需要人工模擬這樣的運算,思路就是把所有數看成字串,一位一位數的相乘。(高精度演算法)
c語言階乘怎麼算
11樓:網友
概率論,乙個c上下個乙個數字的演算法:cmn=m!/[n!*(m-n)!]m在下,n在上n!代表n的階乘=1*2*3*……n。
一、概率的嚴格定義:e是隨機試驗,s是它的樣本空間。對於e的每一事件a賦於乙個實數,記為p(a),稱為事件a的概率。這裡p(·)是乙個集合函式,p(·)要滿足下列條件:
1)非負性:對於每乙個事件a,有p(a)≥0;
2)規範性:對於必然事件s,有p(s)=1;
3)可列可加性:設a1,a2……是兩兩互不相容的事件,即對於i≠j,ai∩aj=φ,i,j=1,2……)則有p(a1∪a2∪……p(a1)+p(a2)+.
二、概率論是研究隨機性或不確定性等現象的數學。更精確地說,概率論是用來模擬實驗在同一環境下會產生不同結果的情況。在自然界和人類社會中,存在大量的隨機現象,而概率是衡量該現象發生的可能性的量度。
5的C語言程式怎麼寫,用C語言編寫程式,計算表示式112131415的結果線上等。
incude void main printf f n s 你會寫bai1 2 3 4 5吧,如下 du float s 0 for float i 1 i 5 i zhi那麼你會寫 1 1 2 1 3 1 4 1 5吧,如dao下 float s 0 for float i 1 i 5 i 那麼你...
c語言中如何程式設計計算階乘,C語言中如何程式設計計算階乘
常見bai的有兩種 du 遞迴版本 zhi int fac int n 還有一dao種是迴圈版 int ans 1 for int i 1 i n i ans i 測試方法 include int fac int n int main return 0 有個值得注意內的地方 階乘時,容數增大的很快,...
C語言編寫程式計算C語言編寫一個程式計算。。。
親,你的程式迴圈copy永遠不會停止 bai此句for i 1 fabs 1 i i 1 1e 6 i i永遠大於0 所以不會停du止 所以沒輸出入 沒錯zhi誤計算機只能計算有限的數值,這dao種無限逼近型的不能用這種方法算的 fabs 1 i i 1 有錯誤,bai 1 i i 1 1 i i ...