80x86 汇编语言编程:寻找水仙花数

  一个三位的十进制数字 N,如果它的百位数、十位数和个位数的立方和,恰好等于这个数字本身,那么,这个数字 N 就是水仙花数。
  
  现在已经知道,三位的水仙花数共有4个:153,370,371,407;
  四位的水仙花数共有3个:1634,8208,9474;
  五位的水仙花数共有3个:54748,92727,93084;
  六位的水仙花数只有1个:548834;
  七位的水仙花数共有4个:1741725,4210818,9800817,9926315;
  八位的水仙花数共有3个:24678050,24678051,88593477
  ……
  
  十进制自然数中的所有水仙花数共有 88 个,最大的水仙花数有 39 位数。
  这么些水仙花数,都是怎么找出来的呢 ? 当然需要编写程序。
  
  做而论道用汇编语言编写的程序如下。

DATAS	SEGMENT
	IN1	    DB  13,10,'The number is : $'
	A1	    DB  0  ;百位数
	A2  	DB  0  ;十位数
	A3  	DB  0  ;个位数
	B1  	DW  0  ;百位立方
	B2  	DW  0  ;十位立方
	B3  	DW  0  ;个位立方
DATAS	ENDS
	
CODES	SEGMENT
	ASSUME CS:CODES, DS:DATAS
START:
	MOV 	AX, DATAS
	MOV 	DS, AX

	MOV 	CX, 999
L1:
	MOV 	AX, CX
	MOV 	BL, 100
	DIV 	BL	; AL=百位数, AH=余数
	MOV 	A1, AL	;百位
	MOV 	AL, AH
	MOV 	AH, 0
	MOV 	BL, 10
	DIV 	BL
	MOV 	A2, AL	;十位
	MOV 	A3, AH	;个位
	
	CALL	LIFANG	;求各个立方
	
	MOV 	AX, B1
	ADD 	AX, B2
	ADD 	AX, B3
	CMP 	AX, CX
	JNE 	NEXT
	CALL	PRINT	 ;相等则显示
NEXT:
	LOOP	L1    	 ;循环到0为止

	MOV 	AH, 4CH
	INT 	21H
;------------------------------
LIFANG:
	MOV 	AL, A1
	MOV 	AH, 0
	MOV 	BX, AX
	MUL 	BX
	MUL 	BX
	MOV 	B1, AX
	MOV 	AL, A2
	MOV 	AH, 0
	MOV 	BX, AX
	MUL 	BX
	MUL 	BX
	MOV 	B2, AX
	MOV 	AL, A3
	MOV 	AH, 0
	MOV 	BX, AX
	MUL 	BX
	MUL 	BX
	MOV 	B3, AX
	RET
;------------------------------
PRINT:
	LEA 	DX, IN1
	MOV 	AH, 9
	INT 	21H
	MOV 	AH, 2
	MOV 	DL, A1	;百
	ADD 	DL, 30H
	INT 	21H
	MOV 	DL, A2	;十
	ADD 	DL, 30H
	INT 	21H
	MOV 	DL, A3	;个
	ADD 	DL, 30H
	INT 	21H
	RET
;------------------------------
CODES	ENDS
	END 	START

  本程序执行后显示:

  c:\masm510>XX
  The number is : 407
  The number is : 371
  The number is : 370
  The number is : 153
  The number is : 001
  c:\masm510>
  
  本程序,是为百度知道上面的一个问题而编写。

  链接是:http://zhidao.baidu.com/question/1446176832407316980.html

--本文完--

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值