NYOJ-------表达式求值

时间限制:3000 ms | 内存限制:65535 KB

难度:3

描述

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

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

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

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

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

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

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

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

输入第一行: N 表示要计算的表达式个数 (1≤ N ≤ 10) 接下来有N行, 每行是一个字符串,表示待求值的表达式 (表达式中不会有多余的空格,每行不超过300个字符,表达式中出现的十进制数都不 超过1000。)输出输出有N行,每一行对应一个表达式的值。样例输入3add(1,2)max(1,999)add(min(1,1000),add(100,99))样例输出3999200来源第四届河南省程序设计大赛

采用入栈来做.....采用递归效果一样...只是为了自己看的更加清楚..

 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,'\0',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 }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏deepcc

js数字格式化-四舍五入精简版

3996
来自专栏10km的专栏

fastjson:javabean按字段(field)序列化存储为Map并反序列化改进

需求说明 最近的项目应用到redis数据库,需要将java bean存储在redis数据库。因为需要对数据库中的某个字段进行修改,所以在redis上不能用简单的...

2268
来自专栏华仔的技术笔记

iOS中的正则表达式,一篇就够了

38310
来自专栏Hongten

让你一看就明白什么是聚合-java版本_源码下载

=================================================

2593
来自专栏前端杂谈

es6之块级作用域

27411
来自专栏iOS技术杂谈

iOS @property探究(一): 基础详解你要知道的@property都在这里

你要知道的@property都在这里 本文大纲 Apple Adopting Modern Objective-C翻译 @property基本用法 @prope...

4329
来自专栏诸葛青云的专栏

C语言位运算的妙用你知道多少?

位运算在驱动开发中是经常遇到的,尤其是置0和置1。既要指定的位数发生变化,又不能改变其它位的值,还要高效率的编写代码,这时候技巧就很重要了。在位运算中有几个符号...

1854
来自专栏cmazxiaoma的架构师之路

你应该会的一道多线程笔试题

2823
来自专栏chenjx85的技术专栏

leetcode-17-电话号码的字母组合

vector<string> letterCombinations(string digits) 

913
来自专栏编程

《Python编程:从入门到实践》 第二章 笔记

孩子,无论你做什么爸爸妈妈都爱你 我想学Python 找个好人家 2.2.1  变量的命名和使用 变量名只能包含字母、数字和下划线。变量名可以字母或下划线打头,...

1900

扫码关注云+社区

领取腾讯云代金券