L2-033 简单计算器 (25 分)

题目链接

题意

给你n个数,和4个运算符,要求利用堆栈进行遍历实现操作,最后输出结果

思路

1.首先需要两个栈进行存储

2.根据题意和栈的特性,根据不同的符号进行模拟

3.输出结果

坑点

代码

#include<iostream>
#include<stack>
using namespace std;
int main()
{
    int n,x;
    stack<int>s1;//存数 
    stack<char>s2;//存符号 
    cin>>n;//n个数 
    for(int i=0;i<n;i++)
    {
        cin>>x;//遍历读入这些数 
        s1.push(x);//插入队列s1中 
    }
    for(int i=0;i<n-1;i++)
    {
        char y;
        cin>>y;//遍历读入符号 
        s2.push(y);//将符号插入s2中 
    }
    while(s1.size()>1)//如果s1的大小>=2时才能进行操作 
    {
        int a=s1.top();//栈顶赋值给a 
        s1.pop();//弹出 
        int b=s1.top();//同上 
        s1.pop();//弹出 
        char op=s2.top();//操作赋给op 
        s2.pop();//用完弹出 
        if(op=='+') s1.push(a+b);//加号则相加 
        else if(op=='-')//减号则后一个减去前一个 
		{
			s1.push(b-a);//注意还要存入s1中 
		} 
        else if(op=='*')//乘号时 
		{
			s1.push(a*b);//相乘的结果存入 
		} 
        else//除号需特判 
        {
            if(a==0)//分母为零
            {
                printf("ERROR: %d/%d",b,a);//输出 
                return 0;
            }
            s1.push(b/a);//分母不为0 ,存入后一个除以前一个的结果 
        }
    }
    cout<<s1.top();//最后输出结果 
    return 0;
}

总结

难度中等,模拟题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值