問題描述題解:比較low的乙個演算法,棧訪問資料乙個棧存放運算資料,乙個棧存放運算子。遇到括號就遞迴,每次新增資料前判斷資料的長度是否大於0。輸入乙個只包含加減乖除和括號的合法表示式,求表示式的值。其中除表示整除。
輸入格式
輸入一行,包含乙個表示式。
輸出格式
輸出這個表示式的值。
樣例輸入
1-2+3*(4-5)
樣例輸出
-4資料規模和約定
表示式長度不超過100,表示式運算合法且運算過程都在int內進行。
**:
#include#include#include#include#include#include#include#include#include#include#include#include#include#define clr(a,b) memset(a,b,sizeof(a))
#define pb(a) push_back(a)
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f3f3f;
const int maxn = 100000 + 2;
const int minn = 100;
string str;
int i;
int pr(char op)
else if (op == '-')
else if (op == '*')
else
}int oper(int a, int b, char op)
else if (op == '-')
else if (op == '*')
else
}int solve()
else if (str[i] != '('&&str[i] != ')')
else
}op.push(str[i]);
} else if (str[i] == ')')
else
} if (op.size() == 2 && snum.size() == 3)
else
}if (snum.size() > 1)
return snum.top();
}int main()
return 0;
}
南橋杯 表示式求值
include include include typedef struct inodeinode 數值棧 typedef struct cnodecnode 符號棧 typedef struct stackstack 包含兩個數值棧和符號棧的父結構體 void initstack struct s...
藍橋杯 演算法訓練 表示式計算
之前在學習棧的時候老師講過這個問題 思路就是 1.將表示式 中綴式 轉化成字尾式 2.進行字尾式的計算。思路看起來很簡單,但是實際在敲 的時候還是要注意很多問題。下面分享一下個人做法,可以改進之處還希望大家可以指出來,共同進步!一 將中綴式轉化為字尾式 個人採用的是邊輸入邊進行處理 首先設定兩個棧,...
演算法訓練 表示式計算
上網查了一下,採用字尾表示式 從中序表示式 轉換為 後序表示式 由於後續表示式更易計算機去解決,所以我們在運算算術表示式時要先轉換為後序的。方法如下 建立符號棧 順序掃瞄中序表示式 a 是數字,直接輸出 b 是運算子 i 直接入棧 ii 將符號棧中的元素依次出棧並輸出,直到 只出棧,不輸出 iii ...