ถึงเวลาที่คุณจะใช้ภาษาสแต็กใหม่ของฉัน! มันเรียกว่า StackyMath นี่จะเป็นภาษาแบบสแต็กที่มีการดำเนินการ 8 รายการบนสแต็กและวิธีเพิ่มหมายเลขในสแต็ก
รายการของการดำเนินงาน:
/
: แผนก. ดำเนินการกับตัวเลข 2 อันดับแรกของสแต็ก ผลักผลลัพธ์กลับคืนบนสแต็ก*
: การคูณ ดำเนินการกับตัวเลข 2 อันดับแรกของสแต็ก ผลักผลลัพธ์กลับคืนบนสแต็ก-
: การลบ ดำเนินการกับตัวเลข 2 อันดับแรกของสแต็ก ผลักผลลัพธ์กลับคืนบนสแต็ก+
: ส่วนที่เพิ่มเข้าไป. ดำเนินการกับตัวเลข 2 อันดับแรกของสแต็ก ผลักผลลัพธ์กลับคืนบนสแต็ก^
: การยกกำลัง ดำเนินการกับตัวเลข 2 อันดับแรกของสแต็ก ผลักผลลัพธ์กลับคืนบนสแต็ก%
: Modulo ดำเนินการกับตัวเลข 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 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!!!
(ฉันสามารถเพิ่มมากขึ้นถ้าจำเป็น)
654,489,48,43/5*7D+-*%
77.6875
ควรกลับ ( 43/48*5-(7+7)
ควรเป็น(7+7)-43/48*5
)
!
เป็นF
)