计算一个合法表达式的值

问题 A: 计算一个合法表达式的值

时间限制: 1 Sec  内存限制: 128 MB
提交: 348  解决: 180
[提交] [状态] [命题人:li20171026]

题目描述

在题目1688的基础上,添加求解表达式值的功能

输入

同1688,一个合法的表达式

输出

除了1688所识别的符号,还要将计算结果在下一行输出

样例输入 Copy

6+2-7

样例输出 Copy

[6] [+] [2] [-] [7]
1

提示

注意:本题要进行词法分析,从中分离出数值和运算符,数值不一定都是个位数哟!

 

#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
const int maxn=1000;
stacknum;
stackop;
char s[maxn];
mapsign;
void init(int n)
{
    s[n]='#';
    while(!num.empty()) num.pop();
    while(!op.empty()) op.pop();
    op.push('#');
}
int main()
{
    sign['#']=0;
    sign['(']=sign[')']=1;
    sign['+']=sign['-']=2;
    sign['*']=sign['/']=3;
    scanf("%s",s);
    int n=strlen(s);
    for(int i=0;i=sign[s[i]])
            {
                char f=op.top(); op.pop();
                if(f=='('&&s[i++]==')') continue;
                if(f=='#'&&s[i]=='#') break;
                int fig=num.top(); num.pop();
                if(f=='+') x=fig+x;
                else if(f=='-') x=fig-x;
                else if(f=='*') x=fig*x;
                else if(f=='/') x=fig/x;
            }
            num.push(x);
            op.push(s[i]);
            x=0;
        }
    }
    cout<

 

你可能感兴趣的:(计算一个合法表达式的值)