求任意输入的一个数的阶乘?

alpa 2003-06-16 05:58:50
求任意输入的一个数的阶乘,谁有这样的程序给我一个.谢谢!
如9的阶乘等于9*8*7*6*5*4*3*2*1,
...全文
380 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaott 2003-06-17
  • 打赏
  • 举报
回复
;以下代码可满足求9的阶乘,若大于9应如何处理呢?
;如:10,11,……99,100,甚至更大,请高手指点!!
code segment
assume cs:code
start: xor dx,dx
mov cx,9
mov ax,2
mov bx,ax
inc bx
lop: mul bx ;连乘:AX*BX,结果高位字存DX,低位字存AX
inc bx
cmp bx,cx
ja exit
jmp lop
exit: mov ah,4ch
int 21h
code ends
end start
用户 昵称 2003-06-17
  • 打赏
  • 举报
回复
http://homepages.ius.edu/rwisman/c335/Html/Chapter5-1.htm
xiaott 2003-06-17
  • 打赏
  • 举报
回复
茶茶哥,你的程序是死循环啊,如果方便的话请写上注释或用编译器调一下,谢谢!
teal 2003-06-17
  • 打赏
  • 举报
回复
呵呵,忘了,n就是自己给定的,n也不要太大呀,当结果超过了41个字节能表示的范围也会溢出得
当然 可以把 结果再定义大一点
teal 2003-06-17
  • 打赏
  • 举报
回复
大概是这样吧,用41个字节得空间来保存结果
每乘一次,都从结果中取出两个字节,与bx得内容相乘
cx:
di: 记录低两字节向高两字节得进位情况
si: 结果的指针
bx: 乘数


data segment
result db 41 dup(0)

data ends
code segment
assume cs:code ,ds:data
mov ax,data
mov ds,ax

start: xor dx,dx
mov bx, n
mov ax, n
lop: mov si,offset result
mov di,0
mov cx,20
lop1: mov [si],dx
mul bx ;连乘:AX*BX,结果高位字存DX,低位字存AX
add ax,di
mov di,0
add [si],ax
jnc pass
mov di,1
pass:
mov ax,[si+2]
inc si
inc si
dec cx
loop lop1
dec bx
jnz lop

ja exit
jmp lop
exit: mov ah,4ch
int 21h
code ends
end start


zuolihua 2003-06-17
  • 打赏
  • 举报
回复
任意输入的一个数的阶乘
不可能啊,你必须指定一个范围

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧