Факториал - Assembler
Формулировка задачи:
прошу,помогите) нужно написать программу на ассемблере, вычисляющую факториал задаваемого с клавиатуры числа. ДОЛЖНА БЫТЬ РАБОТОСПОСОБНА ДО 1000! . делается умножением "в столбик". создается массив из 2567 цифр(примерно столько цифр в 1000!) и умножается. всё несложно, на паскале написала, а в ассемблере полный ноль(
вот,если что,паскаль
program Project2; uses SysUtils; var l, i, n, x, y, m: integer; {n - вводимое число, x - перенос, y - для промежуточного вычисления} k: array[1..2567] of integer; begin Writeln('input number'); Readln(n); k[2567]:=1; for i:=1 to 2566 do {всё заполняем нулями, кроме последней цифры} k[i]:=0; for l:=1 to n do begin x:=0; for i:=2567 downto 1 do begin y:=k[i]*l+x; {умножаем последнюю цифру на число (от 1 до n)} k[i]:=y mod 10; {в самый младший разряд записываем остаток} x:=y div 10; {а это "в уме", т.е. перенос в следующий разряд} end; end; for i:=1 to 2567 do {выводим число по 20 цифр в строке. в ассемблере это не обязательно} if i mod 20 <> 0 then write(k[i]) else writeln; readln; end.
Решение задачи: «Факториал»
textual
Листинг программы
program Project2; var l, i, n, x, y, m: integer; {n - вводимое число, x - перенос, y - для промежуточного вычисления} k: array[1..3001] of integer; begin Writeln('input number'); Readln(n); k[3001]:=1; for i:=1 to 3000 do {всё заполняем нулями, кроме последней цифры} k[i]:=0; for l:=1 to n do begin x:=0; for i:=3001 downto 1 do begin y:=k[i]*l+x; {умножаем последнюю цифру на число (от 1 до n)} k[i]:=y mod 10; {в самый младший разряд записываем остаток} x:=y div 10; {а это "в уме", т.е. перенос в следующий разряд} end; end; n:=0; while k[n]=0 do n:=n+1; for i:=n to 3001 do {выводим число по 20 цифр в строке. в ассемблере это не обязательно} {if i mod 20 <> 0 then} write(k[i]); {else writeln;} readln; end.
Объяснение кода листинга программы
Вот что происходит в коде:
- Ввод числа:
Программа запрашивает у пользователя ввод числа и сохраняет его в переменную
n
. - Инициализация массива:
Массив
k
инициализируется нулями, кроме последней цифры, которая равна 1. - Вычисление факториала:
Цикл
for
проходит от 1 доn
, делая следующие шаги:- Цикл
for
проходит от 3001 до 1, выполняя следующие шаги:- Переменная
y
вычисляется как произведение последней цифры массиваk
наl
иx
. - Младший разряд
y
записывается в массивk
, а старший разряд становитсяx
.
- Переменная
- После завершения внутреннего цикла, значение
x
увеличивается на единицу.
- Цикл
- Поиск первого ненулевого числа:
Цикл
while
проверяет, является ли первый элемент массиваk
нулем. Если это так, он увеличивается на единицу до тех пор, пока не найдет ненулевой элемент. - Вывод факториала:
Цикл
for
проходит отn
до 3001 и выводит значения массиваk
. Если индекс делится на 20 (что означает, что это последняя строка вывода), он выводит значение без кавычек. В противном случае он выводит значение, заключенное в кавычки.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д