你有沒有遇到過這樣的場景?在朋友圈看到別人發(fā)了個“神奇計算器”,輸入像 3 + 5 2 1 這樣的表達式,它瞬間給出答案 12。你以為是魔法?其實,這背后是一套優(yōu)雅的程序邏輯。
問:怎么用代碼實現(xiàn)一個能計算數(shù)學(xué)表達式的程序?
答:核心思路是“分而治之”——先把表達式拆成數(shù)字和符號,再按優(yōu)先級處理運算。比如 3 + 5 2,我們要先算乘法,再算加法。這就像我們做題時先看括號、再看乘除、最后加減一樣。
舉個真實案例:我曾幫一位朋友寫了個小程序,用于自動計算Excel表格中的公式(比如 =A1+B1C1)。一開始他直接用Python的eval()函數(shù),結(jié)果發(fā)現(xiàn)不安全——用戶輸入惡意代碼可能執(zhí)行系統(tǒng)命令!后來我改用“中綴表達式轉(zhuǎn)后綴表達式”的算法(也叫Shunting Yard算法),徹底解決這個問題。
問:這個算法聽起來很復(fù)雜?
答:其實不難!關(guān)鍵在于兩個步驟:
第一步:把中綴表達式(如 3 + 5 2)變成后綴表達式(3 5 2 +)。這里要用到棧結(jié)構(gòu)。遇到數(shù)字就入棧,遇到運算符則根據(jù)優(yōu)先級決定是否彈出前面的運算符。
第二步:用另一個棧來計算后綴表達式。從左到右掃描,數(shù)字入棧,遇到運算符就彈出兩個數(shù),計算后再壓回棧里。最終棧頂就是答案。
舉個小例子:輸入 4 + 2 3
轉(zhuǎn)后綴:先處理 (優(yōu)先級高),變成 4 2 3 +
計算:2 和 3 入棧 → 彈出 2,3 計算得6 → 壓入6 → 再彈出4和6 → 得10
是不是很像我們小時候用草稿紙一步步算的過程?
問:那這個程序適合發(fā)朋友圈嗎?
答:當然!你可以拍一張手機屏幕,展示你寫的代碼片段(比如Python版本),配上文字:“原來‘計算器’不是魔法,是我用棧和規(guī)則寫出來的!” 精致又有趣,朋友看完都會想:“哇,這人好懂原理!”
小貼士:別忘了加錯誤處理!比如輸入 3 + / 2 就要提示“無效表達式”。這才是成熟程序該有的樣子。
總結(jié)一句話:表達式計算不是玄學(xué),而是邏輯與數(shù)據(jù)結(jié)構(gòu)的完美結(jié)合。寫出來,你會更懂計算機怎么“思考”。

