码迷,mamicode.com
首页 > 其他好文 > 详细

tzoj 3231 表达式求值

时间:2019-04-03 22:33:51      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:isp   using   click   ret   show   bsp   lse   time   inpu   

描述

 

 

给一些包含加减号和小括号的表达式,求出该表达式的值。表达式中的数值均为绝对值小于 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 表达式求值

标签:isp   using   click   ret   show   bsp   lse   time   inpu   

原文地址:https://www.cnblogs.com/ydw--/p/10651721.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!