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

  • 相关阅读:
    解析python数据后用html输出
    python 自动化测试HTTP接口
    python 自动化对比返回结果
    Java 基础知识 练习
    Java 菜鸟学习之 script脚本语句
    java语言的认识
    Script 语言的简单练习题 乘法口诀
    Script 简单语句的练习题
    Java菜鸟培训第二天
    36个号码随机摇奖编码
  • 原文地址:https://www.cnblogs.com/lwhinlearning/p/5661698.html
Copyright © 2011-2022 走看看