go语言算斐波那契数列,斐波那契数列定义

汇编实现斐波那契数列前30项(基于给出的程序修改)

算到第 25 项,就超出 16 位二进制数了。

成都创新互联公司联系电话:18982081108,为您提供成都网站建设网页设计及定制高端网站建设服务,成都创新互联公司网页制作领域十载,包括铜雕雕塑等多个行业拥有丰富的网站推广经验,选择成都创新互联公司,为企业锦上添花。

需要用到 32 位数的运算方法。

楼主提供的这些程序,基本都不能用了。

必须重新编写程序。

程序已经编好,输出如下:

……

28: 0514229

29: 0832040

30: 1346269

哪位高手能不能帮我用汇编语言编写一个程序,就是表示出斐波那契数列的前20个数?

;刚刚写好,呵呵,本人测试通过了,希望对您有帮助,为了方便你看,我加了些注释,有问题可以问我...

ASSUME CS:CODE,DS:DATA

DATA SEGMENT

BUFF DB 10

DB ?

DB 10 DUP(?)

RESULT DW ?

RESULT_SHOW DB 10 DUP(?)

DATA ENDS

CODE SEGMENT

START:

MOV AX,DATA

MOV DS,AX

LEA DX,BUFF

MOV AH,0AH

INT 21H

MOV DI,0

L0: ;统计一共有多少个数字组成

CMP BYTE PTR DS:[DI+2],0DH

JZ GO

INC DI

JMP L0

GO: ;计算第n个斐波那契数,把数字字符串转换为十进制数

MOV BL,10

MOV AX,1

MOV SI,DI ;为后面判断输入的是不是只输入一个数有用

MOV CX,DI

L2: PUSH AX

SUB BYTE PTR DS:[DI+1],30H

MUL BYTE PTR DS:[DI+1]

ADD RESULT,AX

POP AX

MUL BL

DEC DI

LOOP L2

;分两种情况:1.输入的是1;2.输入的不是1

CMP SI,1

JNZ L7

CMP BYTE PTR RESULT,1

JNZ L7

MOV AX,RESULT

JZ L4

L7: MOV AX,1

MOV BX,0

MOV CX,RESULT

DEC CX

L3: ;第n个斐波那契数存放到AX中

PUSH AX

ADD AX,BX

POP BX

LOOP L3

L4:

;显示这个斐波那契数

MOV DX,0

LEA SI,RESULT_SHOW

MOV DI,0 ;利用DI来累计一共有多少个数字

L5:

MOV CX,10

CALL DIVDW

ADD CL,30H

MOV DS:[SI],CL

CMP AX,0

JZ L6

INC SI

INC DI

JMP L5

L6:

MOV DL,DS:[SI]

MOV AH,2

INT 21H

CMP DI,0

JZ OK

DEC SI

DEC DI

JMP L6

OK:

MOV AX,4C00H

INT 21H

;参数: (AX)=DWORD型低16位数据

; (DX)=DWORD型高16位数据

; (CX)=除数

;返回: (DX)=结果的高16位,(AX)=结果的低16位

; (CX)=余数

;32位除16位,可以防止溢出!

DIVDW: ;子程序定义开始,功能是分离各个数字出来

PUSH AX

MOV AX,DX

MOV DX,0

DIV CX

MOV BX,AX

POP AX

DIV CX

MOV CX,DX

MOV DX,BX

RET ;子程序定义结束

CODE ENDS

END START

Go语言 斐波那契数列的解法

这么写效率很低,没有剪枝,存在大量的重复计算。

反正你测试用例是有限的,那我骗过你的测试用例就行了啊;)


文章标题:go语言算斐波那契数列,斐波那契数列定义
分享地址:http://myzitong.com/article/dsciooe.html