В натуральном числе определить цифры, входящие по одному разу, более одного раза - 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

Оцени полезность:

12   голосов , оценка 3.75 из 5
Похожие ответы