• 表达式求值


    NOIP2013普及组初赛 第二题 表达是求值

    这道题考察对表达式的处理能力,只有+和*两种符号,比较简单

    但格式是通用的

    #include<cstdio>

    #include<iostream>
    #include<cstring>

    #include<string>
    using namespace std;
    string s;
    int num[100001],ni=0,si=1,i=0,w=10000;
    char sym[100001];
    void push()
    {
      sym[++si]=s[i];
    }
    void pop()
    {
      switch(sym[si--])
      {
        case'+':num[--ni]+=num[ni+1];num[ni]%=w;break;
        case'*':num[--ni]*=num[ni+1];num[ni]%=w;break;
      }
    }
    bool can()                    //判断优先级
    {
      if(s[i]=='+'&&sym[si]!='(') return 1;
      if(s[i]=='*'&&sym[si]=='*') return 1;
      return 0;
    }
    main()
    {
      cin>>s;
      s[s.size()]=')';
      sym[si]='(';
      while(i<s.size())
      {
        while(s[i]=='(')              //左括号处理
        {
          push();i++;
        }
        int x=0;                    //取数处理
        while(s[i]>='0'&&s[i]<='9')
        {
          x=x*10+s[i++]-'0';
          if(x>=w)x%=w;
        }
        num[++ni]=x;
        do
        {
          if(s[i]==')')            //右括号处理
          {
            while(sym[si]!='(')
            pop();
          }
        else
        {               //根具标志函数优先级来作运算符入栈或栈运算处理  
          while(can()) pop();   
          push();
        }
        i++;
        }while(i<s.size()&&s[i-1]==')');
      }
      printf("%d",num[1]%w);
      return 0;
    }

  • 相关阅读:
    FastAPI项目实战: 个人博客项目的API
    Jmeter分布式执行,java.rmi.UnmarshalException: xxxAbstractSimpleThreadGroup错误
    [转]JMeter分布式的坑
    Docker菜鸟教程-硬敲系列
    VMware EXIS 安装
    2020简单总结
    07.1 迭代器、生成器
    locust 的 ‘1’ 版本时代变化
    移动端专项测试-内存泄漏
    乘风破浪的不止姐姐,还有我们的测试工程师!
  • 原文地址:https://www.cnblogs.com/lwhinlearning/p/5661698.html
Copyright © 2020-2023  润新知