สร้างโปรแกรมที่สามารถแก้ปัญหาการแสดงออกทางคณิตศาสตร์โดยใช้องค์ประกอบจากการสลับด้านของการแสดงออก วิธีที่มันทำคือแทนที่จะอ่านจากซ้ายไปขวาคุณอ่านตัวอักษรแรกแล้วตัวสุดท้ายจากนั้นตัวที่สองจากนั้นตัวที่สองไปที่อื่นเป็นต้นสิ่งนี้จะให้นิพจน์ใหม่ที่คุณต้องประเมินและแสดงผล
a*b/c+d-e
135798642 <-- Order you read the expression in
ae*-bd/+c <-- Order of operation.
ตัวอย่าง:
1*3/2+4-5
15*-34/+2 = -255
หากการแสดงออกไม่ได้«ทำงาน» 1
จะต้องแทรกในตำแหน่งที่จำเป็นเพื่อให้การทำงาน
ตัวอย่างบางส่วนอาจแสดงให้เห็นได้ดีขึ้น:
Input: 1+1+1+1+1
Result: 23 // Because 1+1+1+1+1 -> 11++11++1 -> 23
Input: 1+2-3+12-5
Result: -19 // Because 1+2-3+12-5 -> 15+-22-13+ -> 15+-22-13+1 -> -19
// |
// Not valid expression
Input: 2*2*2*2*2
Result: 968 // Because 2*2*2*2*2 -> 22**22**2 -> 22*1*22*1*2 -> 968
// || ||
// Not valid, 1 must be inserted
Input: 17/2
Output: 127 // Because 17/2 = 127/ -> 127/1 -> 127
+ - * /
ผู้ประกอบการที่จะต้องได้รับการสนับสนุน จะไม่มีวงเล็บ มีการใช้กฎคณิตศาสตร์ปกติและ "ไวยากรณ์" ดังนั้นอินสแตนซ์**
ไม่ได้หมายถึงการยกกำลัง a++++1
เทียบเท่ากับa+1
(เช่นรูปแบบ MATLAB ไม่ใช่ C ++)
ในกรณีที่มีข้อสงสัยการดำเนินการที่ถูกต้องคือ:
-a
+a
a++b
a+-b
a*-b
a*+b
a*++b
a/b
a/-b
a/+b
-a/--b
ในขณะที่ทั้งหมดต่อไปนี้ไม่ถูกต้อง มันแสดงให้เห็นสิ่งที่พวกเขาควรจะทดแทนด้วย:
a+ | a+1
a- | a-1
a++++ | a++++1 (This is equivalent to a+1)
a*+++ | a*+++1 (This is equivalent to a*1)
a**b | a*1*b
a*/b | a*1/b
a/*b | a/1*b
a* | a*1
*a | 1*a
***a | 1*1*1*a
กฎ:
- รหัสสามารถเป็นฟังก์ชั่นหรือโปรแกรมเต็มรูปแบบ
- อินพุตสามารถเป็น STDIN หรืออาร์กิวเมนต์ของฟังก์ชัน
- การป้อนข้อมูลจะต้องเป็นแสดงออกทางคณิตศาสตร์ที่ถูกต้องโดยไม่ใส่เครื่องหมายคำพูด
''
""
หรือ - ผลลัพธ์ควรเป็นคำตอบของนิพจน์ใหม่ในรูปของจำนวนเต็มทศนิยมหรือเศษส่วนแบบง่าย
- ต้องมีอย่างน้อยสามหลักหลังจุดทศนิยมต้องได้รับการสนับสนุน ดังนั้นไม่
1/3 = 0.333
ได้รับการยอมรับ0.33
0.333333333
ans = ...
ได้รับการยอมรับ- ขึ้นบรรทัดใหม่และเว้นช่องว่างนำหน้าและต่อท้าย
- อินพุตจะเป็นจำนวนเต็มเท่านั้น
- การหารด้วยศูนย์อาจทำให้เกิดข้อผิดพลาด NaN, Inf ฯลฯ ไม่อนุญาตให้ส่งออกตัวเลข
เช่นเคยรหัสสั้นที่สุดในไบต์ชนะ ผู้ชนะจะได้รับการคัดเลือกหนึ่งสัปดาห์จากวันที่มีการโพสต์ความท้าทาย คำตอบที่โพสต์ในภายหลังอาจยังคงชนะถ้ามันสั้นกว่าผู้นำปัจจุบัน
0/0
ไหมถ้านิพจน์วิวัฒนาการไปที่การหารจำนวนเต็มหรือโมดูโลตามศูนย์?
x/0
เป็นผลลัพธ์ที่ถูกต้อง ตราบใดที่มันไม่ส่งออกคำตอบที่ไม่ถูกต้องมันก็โอเค ข้อผิดพลาดและ "ไม่ใช่ตัวเลข" ถูกต้องตามคำจำกัดความและอินฟินิตี้คือ "ถูกต้องเพียงพอ"
2^64
และควรผิดพลาดหรือไม่ถ้าคุณไป?