/**计算矩阵连乘的乘法次数 */ #include <iostream> #include <string> #include <stack> using namespace std; const char eoi = '#'; // 矩阵输入结束的标志,已经表达式输入的标志 struct Matrix { int row; int col; Matrix(int a = 0, int b = 0) { this->row = a; this->col = b; } } m[26]; // 存放26个字母对应的矩阵行数和列数 stack<Matrix> s; // 读取矩阵行数和列数,保存到数组中 void read_matrix() { char name; cin >> name; while (name != eoi) { cin >> m[name - 'A'].row >> m[name-'A'].col; cin >> name; } } int main() { cout << "input all matrix names and dimensions..." << endl; read_matrix(); cout << "input expresion..." << endl; string expr; cin >> expr; while (expr != "#") { int ans = 0; for (int i = 0; i < expr.size(); i++) { char ch = expr[i]; if (ch >= 'A' && ch <= 'Z') { s.push(m[ch-'A']); } // 特别要注意的地方,后出栈的在表达式左边 // 先出栈的在表达式右边 // 故b先出栈,然后a出栈 else if (ch == ')') { Matrix b = s.top(); s.pop(); Matrix a = s.top(); s.pop(); ans += a.row * a.col * b.col; s.push(Matrix(a.row, b.col)); } // else { // // 如果是左括号不用处理 // } } cout << "total multication time is: " << ans << endl; cin >> expr; } return 0; }