В натуральном числе определить цифры, входящие по одному разу, более одного раза - Assembler
Формулировка задачи:
Здравствуйте.
У меня стоит задача - Задано натуральное число К. Разработать программу, которая выводит за ростом все цифры, которые входят в это число по одному разу, и все цифры, которые в входят в это число более одного раза.
Если есть идеи или алгоритмы - подкинтьте их мне... Аналогов найти в интернете не могу...
Буду очень благодарен за помощь!
Решение задачи: «В натуральном числе определить цифры, входящие по одному разу, более одного раза»
textual
Листинг программы
LOCALS .model small .stack 100h .data K dw 12234 Digits db 10 dup(0) msgOnce db 'Once:', 0Dh, 0Ah, '$' msgMore db 'More:', 0Dh, 0Ah, '$' CrLf db 0Dh, 0Ah, '$' .code main proc mov ax, @data mov ds, ax mov ax, K mov bx, 10 @@Repeat: mov dx, 0 ;делим (dx:ax) на bx. div bx ;получаем остаток в dx, частное а ax mov si, dx inc byte ptr Digits[si] ;Inc(Digits[D]) or ax, ax ;если ax>0 повторить вычисления jnz @@Repeat ;вывод результата mov ah, 09h lea dx, msgOnce int 21h mov cx, 10 mov si, 0 @@ForOnce: mov dl, Digits[si] cmp dl, 1 jne @@SkipOnce mov ah, 02h mov dx, si add dl, '0' int 21h mov dl, ' ' int 21h @@SkipOnce: inc si loop @@ForOnce mov ah, 09h lea dx, CrLf int 21h mov ah, 09h lea dx, msgMore int 21h mov cx, 10 mov si, 0 @@ForMore: mov dl, Digits[si] cmp dl, 1 jbe @@SkipMore mov ah, 02h mov dx, si add dl, '0' int 21h mov dl, ' ' int 21h @@SkipMore: inc si loop @@ForMore mov ah, 09h lea dx, CrLf int 21h mov ax, 4C00h int 21h main endp end main
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д