Факториал - 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.

Объяснение кода листинга программы

Вот что происходит в коде:

  1. Ввод числа: Программа запрашивает у пользователя ввод числа и сохраняет его в переменную n.
  2. Инициализация массива: Массив k инициализируется нулями, кроме последней цифры, которая равна 1.
  3. Вычисление факториала: Цикл for проходит от 1 до n, делая следующие шаги:
    • Цикл for проходит от 3001 до 1, выполняя следующие шаги:
      • Переменная y вычисляется как произведение последней цифры массива k на l и x.
      • Младший разряд y записывается в массив k, а старший разряд становится x.
    • После завершения внутреннего цикла, значение x увеличивается на единицу.
  4. Поиск первого ненулевого числа: Цикл while проверяет, является ли первый элемент массива k нулем. Если это так, он увеличивается на единицу до тех пор, пока не найдет ненулевой элемент.
  5. Вывод факториала: Цикл for проходит от n до 3001 и выводит значения массива k. Если индекс делится на 20 (что означает, что это последняя строка вывода), он выводит значение без кавычек. В противном случае он выводит значение, заключенное в кавычки.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

13   голосов , оценка 4.154 из 5