設計一個符合下列四個條件的簡單計算機:
(1) 該計算機要可處理基本的四則運算(先乘除後加減)
(2) 讓使用者輸入一字串,該字串的內容即為四則運算式
(3) 不必處理括號運算元
(4) 所有輸入的數字,僅需介於 1 至 9
--
[0;31m ╭╮
[1;31m╭═╮ │ ╭═╮ [34m ◆星際個體: [1;33;41m未來 [32;44m最舊 [33;40m小棧 [0m
[0;32m│ │ ┼ │ │ [1;34m ◆通訊頻率: [32m << [36mBirding [33m.twbbs.org [32m>> < [31m140.112.251.84 [32m>
[1;32m╰═╯ │ ╰═╯ [34m ◆來源座標: [1;33m pcj-a20.pcroom.fcu.edu.tw [0m
[0;36m│ [0m
[1;34m╯ [0m
好久以前做過了
簡單解決你的問題是 "後序式"postfix
並用 stack 去處理這個
這樣簡單講
不知你懂不懂ㄟ
不懂再問 不要人寫給你
多寫才會懂唷
--
高手你好呀
我看你都不回 所以我回了這篇文章 sorry啦
若我寫錯 請回大我信箱
kk...@m2.dj.net.tw
謝謝你的觀看呀
--
※ Origin: 程式設計樂園 ◆ From: dialup044.ppp.scu.edu.tw
先說一下解法....
3+4*2-5*6稱為中序表示法(infix notation)
可是程式在執行的時候要把他改變成 342*+56*-
稱為後序表示法(postfix notation)
例如3+4---->34+
3*5---->35*
3*5-2----->35*2-
2-3*5----->235*-
Good luck!!
--
Origin: [1;36m<洗屁屁小站> [1;32mcpp.twbbs.org [1;33m(140.112.250.100)
Welcome to CPP BBS [1;36m-- [1;31mFrom : [mduer [1;31m[ [mDuercara.Dorm12.NCTU.eduT [1;31m] [m
--
Origin:【台大洗屁屁小站】《cpp.twbbs.org》《140.112.250.100》
演算法如下
設有兩個陣列A,B A中為中序運算式,B為空的
再定義一些動作
shift a 將 a放到B中空位的第一個位子,A的index往後指一個
push a 把a放到堆疊裡 A的index往後指一個
pop 把堆疊最上方的內容放到B中空位的第一個位子
0.一開始A的index指到第一個
1.遇數字則將其shift
2.遇乘除則判斷stack最上層是否為乘除 若是則pop它 一直重覆此步直到stack最上
層不為乘除為止 再將這個乘除push
3.遇加減則將stack pop空再push 之
4.A的index沒得指時將stack pop光
ex 3+2*1
B stack A
shift 3 +2*1
push 3 + 2*1
shift 32 + *1
push 32 *+ 1
shift 321 *+
pop 321*
pop 321*+
得321*+
再由B的第一個往後找第一個運算元 再由此運算元往前找兩個數字計算成另一數
循環下去
ex 321*+
^^^
32+
^^^
5
--
棟折構崩 東山再起 枯樹開花 古道熱腸
不羈之才 小試鋒芒 歧路徬徨 支離破碎
何去何從 可有可無 論才論德 言人人殊
柳暗花明 木本水源 異途同歸 共相勉勵
[m [1;34m※ 來源:‧神秘之旅 bbs.ice.cycu.edu.tw‧[FROM: JavaBoy.ice.cycu.edu.tw] [m