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
原文地址:https://www.cnblogs.com/ydw--/p/10651721.html