是时候实施我新的基于堆栈的语言了!它称为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)
如何将数字压入堆栈:
将数字添加到堆栈很容易,只需将原始数字放在您需要的程序中即可。如果您需要在堆栈上放置多个数字,可以用逗号(,
)分隔它们。您的程序将不需要处理-
输入中的数字,如果用户想要一个数字,则应按想要取反的数字,然后按0和-
。程序输入中的数字也限制为正整数。
输入:
您的程序应从命令行或从std in接受输入。输入将仅由数字(无科学计数法或十进制数)组成,这些数字,
需要根据需要以及上面定义的操作来定界。
输出:
您的程序应将数字打印在堆栈顶部。
错误情况:
- 如果程序尝试过度弹出堆栈,则应打印
StackUnderflowException!!!
。 - 如果除以零,请打印
DivisionByZeroException!!!
- 如果数字超过64位,则在执行程序或处理输入中的数字时,请打印
NumberOverflowException!!!
- 如果以某种方式在堆栈顶部得到负数,并且需要进行阶乘,请打印
NegativeFactorialException!!!
- 如果堆栈顶部有一个浮点数,而下一个操作是阶乘,则打印
FloatingFactorialException!!!
- 如果程序退出时堆栈上没有数字(即程序为空),则打印
EmptyProgram!!!
笔记:
- 输出到的所有错误应获得标准错误或最接近的等效错误。
- 所有数字均限制为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!!!
(如果需要,我可以添加更多)
我想,这就是为什么我包括了他们的部分原因。
—
J Atkin
您的范围可能会更广一些,尽管可以说它
—
Digital Trauma
哇,我忘了那个。但是我不认为它们是重复的,因为您必须处理错误并且在我的系统中定义了更多的运算符。
—
J Atkin
654,489,48,43/5*7D+-*%
应该回来77.6875
。(43/48*5-(7+7)
应为(7+7)-43/48*5
)
!
为F
)。