一、表示式形式
2*3+6/3+5
二、問題
假設一中的表示式是一段程式可讀的字串,如何計算表示式的值
三、思路
1.建立兩個棧,分別為數字棧、和運算子棧
2.遍歷字串
3.當遇到數字將數字儲存到數字棧中
4.當遇到運算子時,比較運算子棧頂元素和當前運算子的優先順序
4.1若當前元素大於棧頂元素,將當前元素壓入運算子棧
4.2若當前元素小於等於棧頂元素,將棧頂元素彈出
4.2.1將數字棧中的前兩個元素彈出與運算子棧彈出的元素計算結果
4.2.2將計算結果儲存到數字棧中
5.遍歷結束後,重複4步驟直到運算子棧沒有運算子
6.最後表示式的結果為棧頂元素
**:
//比較運算子優先順序
int cmp(const char a, const char b)
int cal(int a, int b, const char op)
/**
*應為表示式沒有括號
*所以要考慮運算子的優先順序
*將優先順序儲存在map中,並在cmp函式中比較
*當將要入棧的運算子的優先順序小於或等於則計算
*棧頂元素相鄰數字的結果
*/void calculator2(const string &s)
num.push(number);
} else if (cmp(op.top(), ch)==0)
else
} while (op.top()!='$')
cout << "計算結果:";
cout << num.top();
}
帶括號的表示式計算
時間限制 1 s 記憶體限制 256 mb 測試點數 5 題目描述 小明在你的幫助下,破密了ferrari設的密碼門,正要往前走,突然又出現了乙個密碼門,門上有乙個算式,其中只有 0 9 求出的值就是密碼。小明數學學得不好,還需你幫他的忙。用整數除法 輸入格式 共1行,為乙個算式。輸出格式 共1行,...
表示式括號匹配
假設乙個表示式有英文本母 小寫 運算子 和左右小 圓 括號構成,以 作為表示式的結束符。請編寫乙個程式檢查表示式中的左右圓括號是否匹配,若匹配,則返回 yes 否則返回 no 表示式長度小於255,左圓括號少於20個。輸入格式 一行 表示式 輸出格式 一行 yes 或 no 輸入樣例 1 2 x y...
表示式括號匹配
假設乙個表示式有英文本母 小寫 運算子 和左右小 圓 括號構成,以 作為表示式的結束符。請編寫乙個程式檢查表示式中的左右圓括號是否匹配,若匹配,則返回 yes 否則返回 no 表示式長度小於255,左圓括號少於20個。輸入格式 一行 表示式 輸出格式 一行 yes 或 no include incl...