Basic Calculator II
来源:互联网 发布:java final 对象 编辑:程序博客网 时间:2024/06/05 19:50
Implement a basic calculator to evaluate a simple expression string.
The expression string contains only non-negative integers, +
, -
, *
, /
operators and empty spaces . The integer division should truncate toward zero.
You may assume that the given expression is always valid.
Some examples:
"3+2*2" = 7" 3/2 " = 1" 3+5 / 2 " = 5
别人优秀的代码:
1.这个代码简洁,其中44 - op
代表 op == '+' ? 1 : -1。
同时,>>能跳过空格
int calculate(string s) { istringstream in('+' + s + '+'); long long total = 0, term = 0, n; char op; while (in >> op) { if (op == '+' or op == '-') { total += term; in >> term; term *= 44 - op; } else { in >> n; if (op == '*') term *= n; else term /= n; } } return total;}
2.容易理解,也是很通用的好方法。也是别人优秀的代码
int calculate(string s) { int result = 0, cur_res = 0; char op = '+'; for(int pos = s.find_first_not_of(' '); pos < s.size(); pos = s.find_first_not_of(' ', pos)) { if(isdigit(s[pos])) { int tmp = s[pos] - '0'; while(++pos < s.size() && isdigit(s[pos])) tmp = tmp*10 + (s[pos] - '0'); switch(op) { case '+' : cur_res += tmp; break; case '-' : cur_res -= tmp; break; case '*' : cur_res *= tmp; break; case '/' : cur_res /= tmp; break; } } else { if(s[pos] == '+' || s[pos] == '-') { result += cur_res; cur_res = 0; } op = s[pos++]; } } return result + cur_res; }
3.这个用栈的也是很简单的方法
int calculate(string s) { stack<int> myStack; char sign = '+'; int res = 0, tmp = 0; for (unsigned int i = 0; i < s.size(); i++) { if (isdigit(s[i])) tmp = 10*tmp + s[i]-'0'; if (!isdigit(s[i]) && !isspace(s[i]) || i == s.size()-1) { if (sign == '-') myStack.push(-tmp); else if (sign == '+') myStack.push(tmp); else { int num; if (sign == '*' ) num = myStack.top()*tmp; else num = myStack.top()/tmp; myStack.pop(); myStack.push(num); } sign = s[i]; tmp = 0; } } while (!myStack.empty()) { res += myStack.top(); myStack.pop(); } return res;}
0 0
- Basic Calculator & Basic Calculator II
- [LeetCode] Basic Calculator II
- Basic Calculator II
- [leetcode] Basic Calculator II
- leetcode Basic Calculator II
- Basic Calculator II
- 227Basic Calculator II
- 【LeetCode】Basic Calculator II
- Basic Calculator II
- [Leetcode]Basic Calculator II
- Basic Calculator II
- LeetCode227:Basic Calculator II
- Basic Calculator II
- Basic Calculator II
- Basic Calculator II(**)
- LeetCode Basic Calculator II
- [Leetcode]Basic Calculator II
- Basic Calculator II
- (2.2.9.3)groovy的闭包
- scanf那些事
- 《Motion Design for iOS》(二)
- 怎样修改MFC中应用程序标题的图标?
- Docker容器与容器云
- Basic Calculator II
- git status中很多带#的untrack文件
- (2.2.9.4)grovy脚本类、文件 I/O 和 XML 操作
- iOS设计模式
- Android Studio中关联源码(source for Android API)的方法
- 并行、并发、同步和互斥
- 时间、延迟(Linux设备驱动程序)
- 采用dom实现复选框全选、取消效果
- 二叉树——后序和中序得到前序