乙個三位的十進位制數字 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>
提問者評價:謝謝!
80x86組合語言 分類統計
組合語言的程式設計題!急 有100個學生成績,存放在以data為首址的位元組儲存單元中。試統計其中90 含90 以上的人數,60 90 含60 之間的人數,60以下的人數,分別存入max,middle,min三個變數中。15 分鐘前 做而論道 十七級 最快回答 assume ds qq,cs cc ...
組合語言 80x86定址方式
1 立即定址方式 立即定址方式中指令的運算元是8位或16位立即數,並直接出現在指令中。例如 mov al,10h 源運算元為立即定址 執行後al 10h mov ax,0a48h 源運算元為立即定址 執行後ax 0a48h 立即定址只能用於源運算元,不能用於目的運算元。2 暫存器定址方式 暫存器定址...
80x86組合語言程式設計P50
386 stack segment use32 db 200 dup 0 stack ends con equ 500 data segment use16 a dw m buf db ab 0dh,0ah b dw 0ffaah d dd buf m db 2 dup 1 2 dup 2,b 12...