Консультация № 138683
30.05.2008, 14:34
0.00 руб.
0 1 1
помогите решить задачку! необходимо найти все натуральные числа, не превосходящие заданного N и равные сумме кубов своих чисел...

Обсуждение

давно
Старший Модератор
31795
6196
30.05.2008, 18:03
общий
это ответ
Здравствуйте, ShiZ@!

Программа в приложении.
Подпрограмма контроля <b>Check:</b> рекурсивная и вызывает сама себя с новыми значениями в регистре SI, число суммируется в регистре DI.
Удачи!

Приложение:
MASM;IDEAL or MASMMODEL tiny.186CODESEGorg 100h;переходим в текстовый режимstart: mov ax,3 int 10h;выводим приглашение к вводу mov ah,9 mov dx,offset dbEnter int 21h;готовимся вводить число xor si,si mov di,10;вводим без эхоisInput: xor ax,ax int 16h;если нажата клавиша ввода переходим cmp al,13 jz isStop;проверяем клавиши цифр cmp al,‘0‘ jb isInput cmp al,‘9‘ ja isInput;выводим цифру int 29h;ранее введенное число умножаем на 10 и суммируем с последним введенным числом and ax,0fh xchg ax,si xor dx,dx mul di add si,ax jmp isInput;цикл поиска чиселisStop: xor di,di;вызываем процедуру контроля call Check;проверяем результат cmp si,di jnz isNext;если совпадают числа выводим значение mov al,10 int 29h mov al,13 int 29h;гоовимся делить число на 10 mov ax,si xor cx,cx mov di,10;делим пока не 0 и запоминаем в стекеisDiv: xor dx,dx div di push dx inc cx or ax,ax jnz isDiv;выводим из стека в нужном порядкеisOut: pop ax or ax,30h int 29h loop isOut;перходим к следующему числуisNext: dec si jnz isStop;вывход в дос ret;выводимое сообщениеdbEnter: db 13,10,‘Enter number N:$‘;процедура контроляCheck: push si;проверяем 0 or si,si jz NoCheck;получаем младшую цифру mov ax,si mov bx,10 xor dx,dx div bx;теперь в новое значение mov si,ax;возводим в куб mov ax,dx mov bx,dx xor dx,dx mul bx mul bx;добавляем в общую сумму add di,ax;вызываем саму себя call CheckNoCheck: pop si ret end start
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа