• poj 1684 Lazy Math Instructor(字符串)


    题目链接http://poj.org/problem?id=1686

    思路分析:该问题为表达式求值问题,对于字母使用浮点数替换即可,因为输入中的数字只能是单个digit。

    代码如下:

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <cmath>
    #include <cstdlib>
    #include <string>
    using namespace std;
    
    const int MAX_N = 100;
    const double factor = 1.1;
    double number[MAX_N];
    char str[MAX_N];
    int len, pos;
    
    double Expression( );
    double Term( );
    double Factor( );
    
    void InputExpression( )
    {
      int i = 0;
      pos = 0;
      string str_in;
      getline(cin, str_in);
    
      for (i = 0, len = 0; i < str_in.length( ); ++i, ++len)
        str[len] = str_in[i];
      str[len] = '';
    }
    
    char GetCurrentToken( )
    {
      while (str[pos] == ' ' || str[pos] == '	')
        pos++;
      return str[pos];
    }
    
    char GetNextToken( )
    {
      ++pos;
      while (str[pos] == ' ' || str[pos] == '	')
        pos++;
      if (pos == len)
        return '
    ';
      else
        return str[pos];
    }
    
    double Expression( )
    {
      char ch;
      double term1 = Term( );
    
      while ((ch = GetCurrentToken( )) == '+' || (ch == '-')) {
        GetNextToken( );
        double term2 = Term( );
    
        if (ch == '+')
          term1 += term2;
        else
          term1 -= term2;
      }
    
      return term1;
    }
    
    double Term( )
    {
      char ch;
      double factor_1 = Factor( );
    
      while ((ch = GetCurrentToken( )) == '*') {
        GetNextToken( );
        double factor_2 = Factor( );
    
        factor_1 *= factor_2;
      }
      return factor_1;
    }
    
    double Factor( )
    {
      double value = 0.0;
      char ch = GetCurrentToken( );
    
      if (ch == '(') {
        GetNextToken( ); 
        value = Expression( );
        GetNextToken( );
      } else if (isdigit(ch)) {
        value = ch - '0';
        GetNextToken( );
      }
      else if (ch == '
    ')
        value = -1;
      else {
        if (number[ch - 'A'] == 0)
          value = number[ch - 'A'] = (ch - 'A') * 1.1;
        else
          value = number[ch - 'A'];
        GetNextToken( );
      }
      return value;
    }
    
    int main( )
    {
      int case_time;
    
      scanf("%d
    ", &case_time);
      while (case_time--) {
        InputExpression( );
        double ans_1 = Expression( );
    
        InputExpression( );
        double ans_2 = Expression( );
    
        if (abs(ans_1 - ans_2) < 1e-6)
          printf("YES
    ");
        else
          printf("NO
    ");
      }
    
      return 0;
    }
  • 相关阅读:
    C# CefSharp
    C# CRC16 modbus
    C++ 调试信息输出
    运行elasticsearch.bat出错
    Windows下NodeJS安装与npm环境变量配置
    Rescue
    Catch That Cow
    7.3.1 Swagger 文档生成工具
    3.并发处理
    2.集合处理
  • 原文地址:https://www.cnblogs.com/tallisHe/p/4970472.html
Copyright © 2020-2023  润新知