简单计算器
程序员文章站
2024-02-27 13:02:33
...
利用栈来实现
定义栈
stack<class> s(变量名)
压栈
s.push(n);
出栈
s.pop();
取栈顶
s.top();
判断栈空
s.empty();
#include<iostream>
#include<stack>
using namespace std;
int main()
{
stack<int> s;
stack<char> op1;
int n;
char op;
int sum = 0;
s.push(0);
op1.push('\0');
cin >> n;
s.push(n);
//先读入一个整数值,以保证后面的输入都是 op n 的形式
while ((op = getchar()) != EOF && op != '\n')
{
cin >> n;
if (op == '*') //判断是不是*,如果是,直接让当前输入n和栈顶的相乘,并把结果压栈
{
int n1 = s.top();
sum = (n1 * n) % 10000;
s.pop();
s.push(sum);
}
else if(op=='+') //如果是加号,则要看op栈顶是不是加号,只有是加号,才可以让栈顶和栈顶的下一个相加
{
if (op1.top() == '+')
{
int n1 = s.top();
s.pop();
int n2 = s.top();
s.pop();
sum = (n1 + n2) % 10000;
s.push(sum);
s.push(n);
}
else //否则,只能将其压栈(即栈顶无元素的情况)
{
s.push(n);
op1.push(op);
}
}
}
//待到那个结束之后,其内不可能存在有*的情况,即,全部加法。
//因此,就需要将各个相加了
while (!op1.empty())
{
int n1 = s.top(); //取两个元素,相加。把结果压栈
s.pop();
if (s.empty()) //到达最后一个元素,不可能取两个元素了,提前出栈
break;
int n2 = s.top();
s.pop();
sum = (n1 + n2) % 10000;
s.push(sum);
}
cout << sum;
return 0;
}