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

    时间限制:3000 ms | 内存限制:65535 KB
    难度:3
    描述

    Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min(20,23)的值是20 ,add(10,98) 的值是108等等。经过训练,Dr.Kong设计的机器人卡多甚至会计算一种嵌套的更复杂的表达式。

    假设表达式可以简单定义为:

    1.一个正的十进制数x是一个表达式。

    2.如果xy表达式,则 函数min(x,y)也是表达式,其值为x,y 中的最小数。

    3.如果xy表达式,则 函数max(x,y)也是表达式,其值为x,y 中的最大数。

    4.如果xy表达式,则 函数add(x,y)也是表达式,其值为x,y 之和。

    例如,表达式max(add(1,2),7)的值为7。

    请你编写程序,对于给定的一组表达式,帮助Dr.Kong 算出正确答案,以便校对卡多计算的正误

    输入
    第一行: N 表示要计算的表达式个数 (1≤ N ≤ 10) 接下来有N行, 每行是一个字符串,表示待求值的表达式 (表达式中不会有多余的空格,每行不超过300个字符,表达式中出现的十进制数都不 超过1000。)
    输出
    输出有N行,每一行对应一个表达式的值。
    样例输入
    3
    add(1,2)
    max(1,999)
    add(min(1,1000),add(100,99))
    样例输出
    3
    999
    200
    来源
    第四届河南省程序设计大赛 
    采用入栈来做.....采用递归效果一样...只是为了自己看的更加清楚..
     1 /*ÓÃ×Ö·û´®ÔÝ´æ*/
     2 #include<iostream>
     3 #include<string>
     4 #include<stack>
     5 #include<cstring>
     6 using namespace std; 
     7 
     8 int main()
     9 {
    10     int t,i,j;
    11     double point,value,ans; 
    12     string str;
    13     stack<string> save;
    14     stack<double>tsave;
    15     char temp,temsave[16];
    16     cin>>t;
    17     while(t--)
    18     {
    19         cin>>str;
    20         /*ÈëÕ»*/
    21         for(i=0;i<str.size();i++)
    22         {
    23             /*Çå¿Õstring×Ö·û´®*/
    24             if(str[i]=='a')
    25             {
    26              save.push("add");
    27              i+=2;
    28             }
    29             else if(str[i]=='m')
    30             {
    31                 if(str[i+1]=='i')
    32                     save.push("min");    
    33                 else
    34                     save.push("max");
    35                 i+=2;
    36             }
    37             /*¶ÔÊýÖµµÄ·ÖÎö*/
    38             /*¿¼ÂÇСÊý²¿·Ö*/
    39             else if(str[i]>='0'&&str[i]<='9'||str[i]=='.')
    40             {
    41                 /*½«×Ö·ûת»¯³ÉÊý×Ö*/
    42                int pos=0;
    43                value=point=0;
    44                temp=',';
    45                while(str[i]>='0'&&str[i]<='9'||str[i]=='.')
    46                {
    47                   if(str[i]=='.'||temp=='.')
    48                   {
    49                       temsave[pos++]=str[i];
    50                       temp='.';
    51                   }
    52                   else
    53                     value=value*10+(str[i]-'0');  /*¶ÔÕûÊý²¿·Ö*/
    54                   i++;
    55                }
    56                  i--;
    57                     /*¶ÔСÊý²¿·Ö*/
    58                  for(int j=pos-1;j>0;j--)
    59                  {
    60                      point=(point+(temsave[j]-'0'))*0.1;
    61                  }
    62                  if(temp=='.')
    63                     memset(temsave,'',sizeof(temsave));
    64                tsave.push(point+value);
    65             }
    66             else if(str[i]==')')
    67             {
    68               /*ÍËÕ»*/
    69                 double a=tsave.top();
    70                  tsave.pop();
    71                 double b=tsave.top();
    72                  tsave.pop();
    73                 if(save.top()=="add")
    74                 {
    75                     tsave.push(a+b);
    76                 }
    77                 else if(save.top()=="max")
    78                 {
    79                     tsave.push(a>b?a:b);
    80                 }
    81                 else if(save.top()=="min")
    82                 {
    83                    tsave.push(a<b?a:b);
    84                 }
    85                 save.pop();
    86             }
    87         }
    88         cout<<tsave.top()<<endl;
    89             tsave.pop();
    90     }
    91   return 0;
    92 }
    View Code
    代码:
  • 相关阅读:
    学生管理系统后感
    数据库是什么鬼,怎么连接,怎么搞
    nIce 不看会后悔的o!
    那些年披巾斩浪的数据库
    day82
    day81
    day80
    day79
    day78
    day77
  • 原文地址:https://www.cnblogs.com/gongxijun/p/3419105.html
Copyright © 2011-2022 走看看