Факториал в ОАМ
У меня есть некоторый код OAM здесь, и я просмотрел все инструкции, что они делают, как они действуют, и я переписал все это псевдо, но у меня проблема с поиском (так что я могу сосчитать, сколько) петли есть в программе. Я чувствую, что это должно смотреть мне в глаза, и я сделал тысячу факторных программ на C/Java и т. Д., Но я не могу видеть это здесь.
Таким образом, он принимает пользовательскую запись, если == 0, он прерывается на done [brz], если> 0 break, чтобы пропустить [brp] neg, используемый для отмены значения для значения abs
Процедура Skip выполняет умножение и decrememnts, за которым следуют дополнительные условия, чтобы увидеть, нужно ли ее вызывать снова или программа завершена.
По сути, мне нужно найти петли в этой программе. Как я уже сказал, это, вероятно, смотрит мне в лицо, но это свободно задаваемый вопрос со стороны цессионария..
РЕДАКТИРОВАТЬ, чтобы уточнить: программа не берет факториал одного числа, а умножает факториал каждого введенного числа.
Таким образом, я мог бы поставить 3, -4, 2, 0, и результат будет 288. (3*2*1)(4*3*2*1)(2*1)
РЕДАКТИРОВАТЬ для BRI:
read: noop
lda stdin
brp return
neg
return: bri read
1 ответ
Ну, это не просто факториал.. Это будет версия C:
int result = 1, value;
while(value = get_int()) {
next_loop:
value = abs(c);
do {
skip_loop:
result *= value;
value--;
} while (value > 0);
};
printf("%d\n", result);
Так что это произведение факториалов, и есть ровно две петли.