利用遞迴的思想來解決。
首先考慮沒有括號的問題cal("a+b*c/d-e="),a之後為加法運算(優先順序低),可以轉換為a+cal("b*c/d-e=")。當處理"b*c/d-e"時,b後為乘法,就不能直接b*cal("c/d-e"),而是要將"b*c/d"一口氣都計算出來,之後為減法,又可以通過遞迴來實現,"b*c/d"-cal("e")。
當加上括號後,例如((a+b)*c+d)*f,這裡同樣使用遞迴來消除括號,即cal("((a+b)*c+d)*f")可以轉換為cal("(a+b)*c+d")*f,這樣就少了一層括號,而cal("
(a+b)*c+d
")又可以轉換為cal(a+b)*c+d。這樣括號就通過遞迴逐漸消除了。
#include
using namespace std;
int cal(char *str, int len)
}num1 = cal(str + i + 1, j - i - 1); //將括號內的值求出
i = j + 1; //這裡要注意i的位移的值
} else else }}
if(flag == 1) else if(flag == 2)
if(i == len || str[i] == '=') else if(str[i] == '*' || str[i] == '/') else
i ++;
} else if(str[i] == '+' || str[i] == '-') else }}
return num1;
}int main(void)
字串 四則運算
題目大意 有字串表示的乙個四則運算表示式,要求計算出該表示式的正確數值。四則運算即 加減乘除 另外該表示式中的數字只能是1位 數值範圍0 9 另若有不能整除的情況,按向下取整處理,eg 8 3得出值為2。若有字串 8 7 2 9 3 計算出其值為19。2012年華為上機的乙個題目 題目思路 建立棧分...
字串的四則運算
public string addstrings string num1,string num2 if b 0 tmp 10 return sb.reverse tostring 題目二 字串相減 給定兩個字串形式的非負整數 num1 和num2 計算它們的差。預設num1比num2大 注 不能使用...
字串的四則運算
四則運算,最常用的當然是逆波蘭方法,現將表示式由中綴表示式轉化為字尾表示式,然後再使用棧計算即可。這兩步下來,估計沒有三四百行 是實現不了的。中綴表示式轉字首字尾表示式 將中綴表示式轉換為字尾表示式的演算法思想 數字時,加入字尾表示式 運算子 a.若為 入棧 b.若為 則依次把棧中的的運算子加入字尾...