048 計算階乘函式

2021-10-06 13:49:14 字數 1184 閱讀 8978

;計算階乘	(fact.

asm)

include irvine32.inc

.code

main proc

push 5

;計算5!,將引數儲存在棧中

call factorial ;計算階乘(eax)

call writedec ;顯示結果

call crlf ;

call waitmsg ;

exit ;

main endp

;------

----

----

----

----

----

----

----

----

----

----

- factorial proc

;計算階乘

;接收[ebp+8]

=n,需計算的數字

;返回:eax=n!;--

----

----

----

----

----

----

----

----

----

----

----

- push ebp

mov ebp,esp ;

mov eax,

[ebp+8]

;獲取n

cmp eax,

0;是,繼續

ja l1 ;否,返回1

mov eax,1;

jmp l2 ;

l1:dec eax ;

push eax ;計算fact

(n-1

) call factorial ;

;每一次遞迴呼叫返回時

;都要執行下面的指令

returnfact:

mov ebx,

[ebp+8]

;獲取n

mul ebx ;edx:eax=eax*ebx

l2:pop ebp ;返回eax

ret 4

;清除堆疊

factorial endp

end main

大數值階乘計算函式

階乘往往由於數值巨大而無法用乙個long int或者double型別資料儲存。近日無聊寫了個大數值階乘的計算函式,理論上只要記憶體足夠,能夠計算出任何數值的階乘,但實際上100萬以上的階乘計算不管是時間消耗還是記憶體消耗都是極為驚人的,建議使用該函式計算100萬以下的階乘。為了有足夠的空間儲存結果,...

階乘計算 大數計算

輸入乙個正整數n,輸出n 的值。其中n 123 n。演算法描述 n 可能很大,而計算機能表示的整數範圍有限,需要使用高精度計算的方法。使用乙個陣列a來表示乙個大整數a,a 0 表示a的個位,a 1 表示a的十位,依次類推。將a乘以乙個整數k變為將陣列a的每乙個元素都乘以k,請注意處理相應的進製。首先...

十五 階乘計算

題目 階乘計算 輸入乙個正整數n,輸出n 的值。其中n 1 2 3 n。演算法描述 n 可能很大,而計算機能表示的整數範圍有限,需要使用高精度計算的方法。使用乙個陣列a來表示乙個大整數a,a 0 表示a的個位,a 1 表示a的十位,依次類推。將a乘以乙個整數k變為將陣列a的每乙個元素都乘以k,請注意...