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