【道德经·第二十三章】从事于道者同于道;德者同于德;失者同于失。同于道者,道亦乐得之;同于德者,德亦乐得之;同于失者,失亦乐得之。
基本计算器
题目描述
请写一个整数计算器,支持加减乘三种运算和括号。数据范围:0≤∣s∣≤100,保证计算结果始终在整型范围内。要求:空间复杂度: O(n),时间复杂度 O(n)。
示例1
示例2
1 2
| 输入:"(2*(3-4))*5" 返回值:-10
|
示例3
代码实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| int solve(string s) { int n = s.size(); stack<int> stk; char sign = '+'; int num = 0; int ans = 0; for(int i = 0; i < n; i++) { char c = s[i]; if(c == ' ') continue; if(c>='0' && c<='9') num = num*10 + (c-'0'); if(c == '(') { int j = i+1; int cnt = 1; while(cnt > 0) { if(s[j] == '(') cnt++; if(s[j] == ')') cnt--; j++; } num = solve(s.substr(i+1, j-i-1)); i = j-1; } if(i==n-1 || c=='+' || c=='-' || c=='*' || c=='/') { switch(sign) { case '+': stk.push( num); break; case '-': stk.push(-num); break; case '*': stk.top()*=num; break; case '/': stk.top()/=num; break; } sign = c; num = 0; } } while(!stk.empty()) { ans += stk.top(); stk.pop(); } return ans; }
|
位我上者,灿烂星空;道德律令,在我心中。