表达式求值

· · 个人记录

题目描述

给定一个只包含“加法”和“乘法”的算术表达式,请你编程计算表达式的值。

输入格式 输入仅有一行,为需要计算的表达式,表达式中只包含数字、加法运算符“+”和乘法运算符“*”,且没有括号。

所有参与运算的数字不超过 1000 个,且均为 1000 以内的整数,并且保证最终计算结果不超过 int 范围。

输出格式

输出只有一行,包含一个整数,表示这个表达式的值。

样例输入

1+13+4+52 样例输出

18

样例输入

111+2222+333+502+100

样例输出

1088

代码

#include<bits/stdc++.h>
using namespace std;
int h;
int main()
{
    stack<int> s; //定义栈
 int x,y;//定义变量
char c;//定义变量
cin >> x;输入一个数
s.push(x);
 while(cin >> c >> x)//输入一个符号一个数
 {
    if(c=='+')//如果是+
    {
        s.push(x);//直接进入栈
     }
     if(c=='*')//如果是*
    {
        y=x*s.top();//*上一个数
        s.pop();//把x从栈里删除
        s.push(y);y进入栈
     }
 }
 while(!s.empty())//只要栈没清空
 {
    h=h+s.top();//累加
    s.pop();//从栈里删除
 }
 cout << h;//输出和
    return 0;
}

总结

这道题我们用栈来解决,先输入一个数,在一个符号一个数的输入,如果符号是+,直接进入栈,如果符号是,上一个数,再进入栈,最后把栈累加起来就可以啦!