L2-033 简单计算器(stack用法)

该博客介绍了一个针对初学者设计的基于堆栈的简单计算器。计算器有两个堆栈,一个用于存储数字,另一个用于存储运算符。当按下等号键时,计算器依次执行弹出数字和运算符进行计算,直到两个堆栈都为空。代码中处理了加减乘除四种运算,并在除法时检查分母为零的情况。输入示例展示了不同操作的执行过程,输出包括最终计算结果或错误信息。
摘要由CSDN通过智能技术生成

在这里插入图片描述

本题要求你为初学数据结构的小伙伴设计一款简单的利用堆栈执行的计算器。如上图所示,计算器由两个堆栈组成,一个堆栈 S​1存放数字,另一个堆栈 S2存放运算符。计算器的最下方有一个等号键,每次按下这个键,计算器就执行以下操作:

1.从 S​1中弹出两个数字,顺序为 n1和 n2
2.从 S​2中弹出一个运算符 op;
3.执行计算 n​2​​ op n1
4.将得到的结果压回 S​1

直到两个堆栈都为空时,计算结束,最后的结果将显示在屏幕上。

输入格式:
输入首先在第一行给出正整数 N(1<N≤10​3​​ ),为 S​1中数字的个数。

第二行给出 N 个绝对值不超过 100 的整数;第三行给出 N−1 个运算符 —— 这里仅考虑 +、-、*、/ 这四种运算。一行中的数字和符号都以空格分隔。

输出格式:
将输入的数字和运算符按给定顺序分别压入堆栈 S1和 S​2
​​ ,将执行计算的最后结果输出。注意所有的计算都只取结果的整数部分。题目保证计算的中间和最后结果的绝对值都不超过 10​9​​ 。

如果执行除法时出现分母为零的非法操作,则在一行中输出:ERROR: X/0,其中 X 是当时的分子。然后结束程序。

输入样例 1:

5
40 5 8 3 2
/ * - +

输出样例 1:

2

输入样例 2:

5
2 5 8 4 4
* / - +

输出样例 2:

ERROR: 5/0

解题思路:
考察stack的用法,pop()取出,top()为顶元素,push()压入,empty()判断是否为空,size()元素个数。

代码:

#include<iostream>
#include<stack>
#include<string>
using namespace std;
int main()
{
    stack<int>s1;
    stack<char>s2;
    int a,b,c,n1,n2,op,sum,flag=1;
    char d;
    cin>>a;
    for(b=0;b<a;b++)
    {
        cin>>c;
        s1.push(c);
    }
    for(b=0;b<a-1;b++)//cin会吃掉空格,注意控制次数
    {
        cin>>d;
        s2.push(d);
    }
    while(s1.size()!=1)//剩下一个数就是结果
    {
        n1=s1.top();
        s1.pop();
        n2=s1.top();
        s1.pop();
        op=s2.top();
        s2.pop();
        if(op=='+')sum=n2+n1;
        else if(op=='-')sum=n2-n1;
        else if(op=='*')sum=n2*n1;
        else
        {
            if(n1==0)
            {
                flag=0;//控制输出
                cout<<"ERROR: "<<n2<<"/0"<<endl;
                break;
            }
            sum=n2/n1;
        }
        s1.push(sum);
    }
    if(flag)
    cout<<s1.top()<<endl;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旧林墨烟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值