#include<iostream>
#include<stack>
#include<string>
using namespace std;
class calculator
{
private:
stack<int>num;
stack<char>op;
string formulas;
public:
calculator()
{
while(!num.empty())
{
num.pop();
}
while(!op.empty())
{
op.pop();
}
formulas="";
}
~calculator()
{
while(!num.empty())
{
num.pop();
}
while(!op.empty())
{
op.pop();
}
formulas="";
}
void input()
{
cin>>formulas;
}
void calculate()
{
int n=formulas.length();
int i=0,count=0,c=1,number=0;
for(i=0;i<n;i++)
{
if(formulas[i]>='0'&&formulas[i]<='9')
{
***number=number*10+(formulas[i]-'0');//计算多位数 ***
if(formulas[i+1]<'0'||formulas[i+1]>'9')
{
num.push(number);
number=0;
}
}
else if(formulas[i]=='+'||formulas[i]=='-')
{
while(!op.empty()&&op.top()!='(')
{
cal_res();
}
op.push(formulas[i]);
}
else if(formulas[i]=='*'||formulas[i]=='/')
{
while(!op.empty()&&op.top()!='('&&op.top()!='+'&&op.top()!='-')
{
cal_res();
}
op.push(formulas[i]);
}
else if(formulas[i]=='(')
{
op.push(formulas[i]);
}
else if(formulas[i]==')')
{
while(op.top()!='(')
{
cal_res();
}
op.pop();
}
}
while(!op.empty())
{
cal_res();
}
cout<<num.top()<<endl;
}
void cal_res()
{
int l,r,ans;
r=num.top();
num.pop();
l=num.top();
num.pop();
char c=op.top();
if(op.top()=='+')
{
ans=l+r;
}
else if(op.top()=='-')
{
ans=l-r;
}
else if(op.top()=='*')
{
ans=l*r;
}
else if(op.top()=='/')
{
ans=l/r;
}
op.pop();
num.push(ans);
}
};
int main()
{
calculator a;
int n=10;
while(n--)
{
a.input();
a.calculate();
}
return 0;
}
原 推免复习-数据结构-栈应用-计算表达式(版本3-多位计算)
最新推荐文章于 2021-12-09 09:37:07 发布