Час для вас реалізувати мою нову мову на основі стека! Це називається StackyMath. Це буде мова на основі стека з 8 операціями над стеком та способи додавання чисел до стеку.
Перелік операцій:
/: Відділ. Виконується на верхніх 2 числах стека. Відсуває результат назад на стек.*: Множення. Виконується на верхніх 2 числах стека. Відсуває результат назад на стек-: Віднімання. Виконується на верхніх 2 числах стека. Відсуває результат назад на стек+: Доповнення. Виконується на верхніх 2 числах стека. Відсуває результат назад на стек^: Експоненція. Виконується на верхніх 2 числах стека. Відсуває результат назад на стек%: Модуло. Виконується на верхніх 2 числах стека. Відсуває результат назад на стек!: Факторський. Виконується на верхньому номері на стеку. Відсуває результат назад на стекD: Дублюйте верхній номер у стеці
Операції, визначені псевдокодом:
/:push(pop divided by pop)*:push(pop times pop)-:push(pop minus pop)+:push(pop plus pop)^:push(pop to the pop)%:push(pop mod pop)!:push(factorial pop)D:t = pop; push(t); push(t)
Як натиснути числа на стек:
Додавання чисел до стеку досить просто, просто покладіть необроблений номер у свою програму там, де вам це потрібно. Якщо вам потрібно помістити кілька стеків у стек, ви можете розділити їх комою ( ,). Вашій програмі не потрібно буде обробляти -цифри на вводі. Якщо користувач хоче одного, він повинен натиснути число, яке вони хочуть, заперечувати, нуль і- . Числа у вході програми також обмежені додатними цілими числами.
Вхід:
Ваша програма повинна приймати дані в командному рядку або з std дюйма. Вхід буде складатися лише з цифр (без наукових позначень чи десяткових знаків), обмежених , необхідність, та операцій, визначених вище.
Вихід:
Ваша програма повинна надрукувати номер у верхній частині стека.
Випадки помилок:
- Якщо програма намагається перевернути стек, слід надрукувати
StackUnderflowException!!!. - Якщо ви розділили нуль, надрукуйте
DivisionByZeroException!!! - Якщо число, яке перевищує 64 біт, або під час виконання програми, або обробляючи номер на вводі, надрукуйте
NumberOverflowException!!! - Якщо якимось чином ви отримаєте від’ємне число у верхній частині стека і вам потрібно зробити фактор, надрукуйте
NegativeFactorialException!!! - Якщо у вас є номер із плаваючою комою на вершинах стека, і наступна операція є факторною, друкуйте
FloatingFactorialException!!! - Якщо на стеку немає номерів, коли програма закінчується (тобто програма була порожньою), друкуйте
EmptyProgram!!!
Примітки:
- Усі вихідні помилки до повинні мати yo std помилку або найближчий еквівалент.
- Усі числа обмежені 64-бітовою плаваючою точкою.
Приклади програм:
50,47* -> 2350
50,47/ -> 0.94
100,8! -> 40320
100D* -> 10000
! -> StackUnderflowException!!!
5,2/! -> FloatingFactorialException!!!
4,3!2*/ -> 3
654,489,48,43/5*7D+-*% -> 77.68749999999909
-> EmptyProgram!!!
(Я можу додати більше, якщо потрібно)
654,489,48,43/5*7D+-*%повинен повернутися 77.6875. ( 43/48*5-(7+7)повинен бути (7+7)-43/48*5)
!наF).