HUST Online Judge WebBoard
Problem 114514 >> c++计算器(可用+,-,*,/,(,) )
zhangwenbo @ 2024-12-02 19:04:42
[ Quote ] [ Edit ] [ Delete ] 1#
#include<bits/stdc++.h>
using namespace std;
stack<int> shu;
stack<char> fu;
string s;
void jisuan(){
int num1=shu.top();
shu.pop();
int num2=shu.top();
shu.pop();
char c=fu.top();
fu.pop();
int r;
if(c=='+'){
r=num2+num1;
}else if(c=='-'){
r=num2-num1;
}else if(c=='*'){
r=num2*num1;
}else if(c=='/'){
r=num2/num1;
}
shu.push(r);
}
int main(){
cin>>s;
int sum=0;
for(int i=0;i<s.size();i++){
if(s[i]>='0'&&s[i]<='9'){
sum=sum*10+s[i]-'0';
}else{
if(i>0&&s[i-1]>='0'&&s[i-1]<='9'){
shu.push(sum);
sum=0;
}
if(fu.empty()){
fu.push(s[i]);
}else{
if(s[i]=='('){
fu.push(s[i]);
}else if(s[i]==')'){
while(fu.top()!='('){
jisuan();
}
fu.pop();
}else if(s[i]=='*'||s[i]=='/'){
if(fu.top()=='*'||fu.top()=='/'){
jisuan();
fu.push(s[i]);
}else if(fu.top()=='+'||fu.top()=='-'||fu.top()=='('){
fu.push(s[i]);
}
}else if(s[i]=='+'||s[i]=='-'){
if(fu.top()=='('){
fu.push(s[i]);
}else{
jisuan();
fu.push(s[i]);
}
}
}
}
}
if(s[s.size()-1]>='0'&&s[s.size()-1]<='9')shu.push(sum);
while(!fu.empty())jisuan();
cout<<shu.top();
return 0;
}
zhangwenbo @ 2024-12-02 19:04:57
[ Quote ] [ Edit ] [ Delete ] 2#
给你们个例子
zhangwenbo @ 2024-12-02 19:05:13
[ Quote ] [ Edit ] [ Delete ] 3#
输入
(1+2)*3-4/2
输出
7