Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Дан четырёхзначный номер года. Определить номер столетия

nikolai ceplyaev Знаток (462), закрыт 12 лет назад
Дан четырёхзначный номер года. Определить номер столетия, например, при 14 92 ответом должно быть "15", а при 1812 - "19". Учесть, что началом века считается первый, а не нулевой год: так, при вводе 2000 ответом будет "20".
Как это на ассемблере сделать?
Лучший ответ
Миоко Таканава Гений (51595) 12 лет назад
Поправляю Алексея:
Точно так же, как и на других языках. Уменьшить год на единицу, получить целую часть от деления на сто и к результату прибавить единицу.

.386
.model flat, stdcall
option casemap:none

include windows.inc
include kernel32.inc
include msvcrt.inc
includelib kernel32.lib
includelib msvcrt.lib

.stack 100h

.data
tPrompt db 'Введите четырёхзначный номер года: ',0
tError db 'Ошибка! Повторите ввод. ',13,10,0
tResult db '%d век. ',0
fInput db '%d\n',0
Year dd ?

.code
N76070897:
    invoke crt_printf,addr tPrompt
    invoke crt_scanf,addr fInput,addr Year
    cmp Year,1000
    jb Error
    cmp Year,9999
    ja Error
    mov eax,Year
    dec eax
    cdq
    mov ecx,100
    div ecx
    inc eax
    invoke crt_printf,addr tResult,eax
    invoke crt__flushall
    invoke crt_scanf,addr fInput+2
    invoke ExitProcess,NULL
   
Error:
    invoke crt_printf,addr tError
    jmp N76070897
   
    end N76070897

Остальные ответы
Alexey N Просветленный (34836) 12 лет назад
А точно так-же, как и на других языках - целочисленно поделить на сто и прибавить 1.
Похожие вопросы