一个三位的十进制数字 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。
--本文完--