stoi() 参考 http://t.csdn.cn/L8DMQ
原题逆波兰表达式求值_牛客题霸_牛客网 (nowcoder.com)
class Solution { public: int evalRPN(vector<string>& tokens) { stack<int> st; for(int i = 0; i < tokens.size(); i++){ string s = tokens[i]; if(s != "+" && s != "-" && s != "*" && s != "/") st.push(stoi(s)); //遇到数字加入栈中 else{ //遇到符号,拿出栈中最近的两个元素计算 int num = st.top(); st.pop(); switch(s[0]){ //根据符号运算 case '+': st.top() += num; break; //结果存入前一个数 case '-': st.top() -= num; break; case '*': st.top() *= num; break; case '/': st.top() /= num; break; } } } return st.top(); //栈中最终留下的就是答案 } };
[NOIP2013]表达式求值 (nowcoder.com)
如果是acm模式最好用这个方法
#include<bits/stdc++.h> using namespace std; int main() { int n,m,sum,ans; char c; scanf("%lld",&n);//先取出算式中的第一个数 while(scanf("%c%lld",&c,&m)!=EOF) { if(c=='+') { sum+=n; n=m; } else if(c=='*') { n*=m; } sum%=10000; n%=10000; } printf("%lld",(sum+n)%10000); return 0; }