是时候实施我新的基于堆栈的语言了!它称为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)。