▶ 两个四则表达式运算的题目,第 770 题 Basic Calculator IV 带符号计算不会做 Orz,第 772 题 Basic Calculator III 要收费 Orz。
▶ 自己的全能版代码,28 ms,采用表达式中缀转后缀,然后利用栈来计算。支持加减乘除幂模,一模一样的代码刷掉了这两题,就是效率比较低,28 ms
1 class Solution 2 { 3 public: 4 int calculate(string s)//计算器,输入表达式,输出计算结果 5 { 6 string out; 7 mid_to_last(s, out); 8 return calculate_last(out); 9 } 10 private: 11 int power(int a, int b)// 整数幂运算,a^b 12 { 13 int output; 14 for (output = 1; b > 0; a *= a, b >>= 1) 15 { 16 if (b & 1) 17 output *= a; 18 } 19 return output; 20 } 21 int numread(const string & in, int start, string & output)//读取字符串数字,返回包括前导空白的数字长度 22 { 23 int i, blankLen; 24 for (i = start, blankLen = 0, output = ""; in[i] == ' '; i++, blankLen++);// 跳过前导空白 25 if (in[i] == '-') // -3 26 i++; 27 else if (in[i] == '+') // +3 28 i++, blankLen++; 29 if (in[i]<'0' || in[i]>'9') // 不是数字 30 return 0; 31 for (; in[i] >= '0' && in[i] <= '9'; i++); // 寻找有效字符末尾 32 output = in.substr(start + blankLen, i - start - blankLen); 33 return blankLen + output.size(); 34 } 35 int rankSign(char c)//规定运算等级 36 { 37 switch (c) 38 { 39 case '