zoukankan      html  css  js  c++  java
  • 表达式求值

    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;
    }

  • 相关阅读:
    关于“云计算”
    实现工作流至少需要几张表?
    BPI (业务流程改进)项目的管理沙龙笔记
    对“设计”工作在流程中的重新定位
    面向。。。驱动
    定个小目标
    Redis源码分析Sentinel(1)Sentinel服务器
    Redis源码分析Sentinel(3)主观下线与客观下线
    Redis源码分析Sentinel(2)实例处理的Monitor half
    Redis源码分析Sentinel(4)实例处理的Acting half
  • 原文地址:https://www.cnblogs.com/lwhinlearning/p/5661698.html
Copyright © 2011-2022 走看看