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
复制代码

 

复制代码

 

posted @   -第4题-  阅读(231)  评论(0编辑  收藏  举报
编辑推荐:
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)
· 程序员常用高效实用工具推荐,办公效率提升利器!
点击右上角即可分享
微信分享提示