題目:
給定乙個帶加減乘除括號的表示式子字串,求其結果
如:(10+20)*3 的結果為90
思路:一、去括號。用乙個棧記錄左括號的位置,遍歷字串,讀取到右括號後棧pop,進行括號間式子的運算,並將結果字串替換回原字串。
二、進行不帶括號的式子的運算。用乙個棧記錄數字,乙個棧記錄運算子。讀到數字直接入棧,讀到運算子再進行運算。如果是乘號/除號,拿棧頂數字和下乙個數字進行運算,結果入棧;如果是加號/減號,如果運算子棧裡還有運算子(只可能是加/減),進行運算子和棧前兩個數的運算,結果入棧,再將當前運算子入棧。
三、特殊情況,字串第一位為負號時,前面補0。運算子後為負號時,提前進行下一位數字的讀取,計為負數。
#include #include #include #include using namespace std;
// 四則運算輔助函式
int helper(int a, int b, char op)
}// 讀取從i開始的整數,引用j表示該整數的最後一位的位置
int get_int(int i, int& j, string& s)
// 運算乙個不帶括號的式子
int cal(string s) else else
ops.push(s[i]);
}// 運算子後有減號,說明下乙個數是負數,提前讀取入棧
if(s[i+1] == '-') }}
// 因為加/減法是算前面的加減法,最後可能有剩餘乙個加法運算
if(!ops.empty())
return nums.top();
}int main() ;
for(auto& s:v)
else if(s[i] == ')')
}cout << cal(s) << endl;
} else
}}
實現帶括號加減乘除運算
問題描述 輸入乙個只包含加減乖除和括號的合法表示式,求表示式的值。其中除表示整除。輸入格式 輸入一行,包含乙個表示式。輸出格式 輸出這個表示式的值。樣例輸入 1 2 3 4 5 樣例輸出 4資料規模和約定 表示式長度不超過100,表示式運算合法且運算過程都在int內進行。include includ...
C 位運算實現加減乘除
近日複習劍指offer,看到了當時寫第65題題實現了位運算的加減乘除法,特此記錄 int add int num1,int num2 return num1 int add2 int num1,int num2 2.一種減法運算 intnegtive int num1,int num2 3.一種乘法...
筆試題 C 利用棧實現帶括號的加減乘除
參考其他的思路,改了原來的bug。對浮點數 整數都適用。維護三個棧,分別存括號 數字 首先遍歷匹配括號,取出括號內的子字串 然後計算只包括 及數字的子字串的結果,先計算 將 全部入棧,然後計算只包含 的結果。include include include include includeusing n...