看板 C_and_CPP 關於我們 聯絡資訊
不小心逛到這篇文章~ ※ 引述《bioudee (It's my life!!)》之銘言: : 需要寫個有關數學運算的程式, : 一次從stdin讀入一行直到EOF, : 按CR會從stdout印出答案 : . : 數字包括正負數 (-1), 小數點(1.11), 分數(3/4). : 運算符號包括 +, -, *, /, %, : ^, : 如果有括號則會優先處理. : EX: : 22+34+66-77 = 45 : (1)+(25*3)-2 = 74 : 13^5 = 371293 : 99 % 14 = 1 : 36 / 0 = ERROR : 10^20 = ERROR : 2^(.5) = 1.41421356 : 1--+3-(42+--5/2) = -40.5000000 : -(3^(2*(4-1))) = -729 : 請有經驗的大大幫幫忙 : 謝謝 推文提供了一些解法 推 ADF:google "math expression parser" 11/27 15:02 推 godfat:用 boost::spirit 滿好寫的,不過需要研究一下 11/27 15:46 → ADF:樓上是boost魔人.. 11/27 16:07 → sunneo:你用堆疊作作看吧... 11/27 18:05 推 gozha:用遞迴做二元樹,我是這樣做的.. 11/27 18:52 推 carlcarl:將運算式轉成後序 利用STACK 這樣會比較好處理 最近寫程式都是站在"巨人的肩膀"上,看到這題目手癢了一下 在星巴克點了杯"焦糖瑪奇朵",開始 implement 沒想到,咖啡喝完了~ code 還沒生出來 仔細想想,這題目也運用到了很多資訊科學的核心基礎觀念(很多都還給老師了 = =) 資料結構、演算法、Compiler、正規語言 等等。 光是要設計出符合計算機程式的需求就花了我不少時間了 eq. 1-2-3 的語意為 (1-2)-3 1+2*3 的語意為 1+(2*3) 還有很多議題可以討論: 是否要建立二元樹 用遞迴 or Stack or Table 是否用大數 or double 錯誤處理 平行計算 用 boost::spirit or Lex&Yacc 來寫 我自己目前寫了 double 版本的的計算機 (利用二元樹來實作) 接下來會實作大數版本 以及 boost::spirit 如何使用 不過就算自己寫的很爽 還是很多地方會沒考慮到 我想請有寫過計算機程式的或是跟我一樣手癢的版友, 跟我交換 soure code 分享一下彼此的 coding style 我再把計算機程式基本的寫法,或是有特殊有趣的心得 po 上來給大家分享 謝謝 ====================================== ps. 有興趣的可以寄我站內信跟我要聯絡方式 源碼寄給我後,會以群組方式在寄給大家 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.216.172.170
king19880326:源碼, 你是大陸人?? 06/26 03:06
softwind:stack+big num. 其他就商品化在看摟 06/26 12:01
softwind:不一定要寄信 你可以看置底文 分享source code 06/26 12:03
dos792:為啥不直接看boost 源碼 06/26 17:56