tzoj 3231 表达式求值

Posted ydw--

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tzoj 3231 表达式求值相关的知识,希望对你有一定的参考价值。

描述

 

 

给一些包含加减号和小括号的表达式,求出该表达式的值。表达式中的数值均为绝对值小于 10 的整数。

 

 

输入

 

 

第一行为表达式的个数 n,以下 n 行每行有一个表达式。每个表达式的长度不超过 50 个字符。

 

 

输出

 

 

对每个表达式,输出它的值。

 

 

样例输入

样例输出

用递归

技术图片
#include<bits/stdc++.h>
using namespace std;
char s[55];
int l;
int flag;
int ydw(char s[],int q)//和主函数类似 再另外算个flag 
{
    int i;
    char p=+;//初始 
    int sum=0;
    for(i=q+1;i<l;i++)
    {
        if(s[i]==+)p=+;
        else if(s[i]==-)p=-;
        else if(s[i]==()//遇到(就递归  
        {
            int yy=ydw(s,i);
            if(p==+)sum+=yy;
            else sum-=yy;
            i=flag;
        }
        else if(s[i]==))
        {
            flag=i;
            return sum;
        }
        else 
        {
            if(p==+)sum+=(s[i]-0);
            else sum-=(s[i]-0);
        }
    }
}
int main()
{
    int i,n;
    cin>>n;
    getchar();
    while(n--)
    {
        cin>>s;
        int sum=0;
        l=strlen(s);
        char p=+;//初始 
        for(i=0;i<l;i++)
        {
            if(s[i]==+)p=+;
            else if(s[i]==-)p=-;
            else if(s[i]==()//遇到(就递归 
            {
                int yy=ydw(s,i);
                if(p==+)sum+=yy;
                else sum-=yy;
                i=flag;
            }
            else if(s[i]>=0&&s[i]<=9)
            {
                if(p==+)sum+=(s[i]-0);
                else sum-=(s[i]-0);
            }
        }
        cout<<sum<<endl;
    }
    return 0;//3-(2+1-2-9-(6-2)+(2-8)) =21
}
View Code

 

 

以上是关于tzoj 3231 表达式求值的主要内容,如果未能解决你的问题,请参考以下文章

C语言编一个实现简单的算术表达式求值的代码。

TZOJ--4858: 多项式输出 (模拟)

Java Eclipse 求值表达式

python 短路求值或惰性求值

Java 表达式中子表达式的求值顺序

表达式求值