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


提问者评价:谢谢!


  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值