题目描述

输入一个字符串形式的表达式,该表达式中包括整数,四则运算符(+、-、*、/),括号,三角函数(sin(x)、cos(x)、tan(x)),底数函数(lg(x)、ln(x)),计算该表达式的值

输入

输入一个字符串形式的表达式,保证中间及最终结果不超出double的范围

 

输出

表达式的值,保留6位小数

样例输入

3
3+5
((2-1)*5-1)*6
1+cos(0)

样例输出

3.000000
8.000000
24.000000
2.000000

来源

2015机考D题

#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<stack>
using namespace std;
int main()
{
string str;
while(cin>>str)
{
stack<double>num;
stack<char>chr;
for(int i=;i<str.size();i++)
{
//cout<<str[i]<<" ";
double number=;
if(str[i]>=&&str[i]<=)
{
number=str[i]-;
while(str[i+]>=&&str[i+]<=)
{
number=number*+(str[i+]-);
i++;
}
num.push(number);
}
else if(str[i]=='(')
chr.push(str[i]);
else if(str[i]=='+'||str[i]=='-')
chr.push(str[i]);
else if(str[i]=='*'||str[i]=='/')
{
char t=str[i];
i++;
number=str[i]-;
while(str[i+]>=&&str[i+]<=)
{
number=number*+(str[i+]-);
i++;
}
num.push(number);
double x=num.top();num.pop();
double y=num.top();num.pop();
double n=;
if(t=='*')
n=x*y;
else n=x/y;
num.push(n);
}
else if(str[i]==')')
{
char temp=chr.top();chr.pop();
double x=num.top();num.pop();
double y=num.top();num.pop();
double n=;
if(temp=='+')
n=x+y;
else if(temp=='-')
n=y-x;
num.push(n);
chr.pop();
chr.pop();
}
else if(str[i]=='s'||str[i]=='c'||str[i]=='t')
{
char t=str[i];
i=i+;
number=str[i]-;
while(str[i+]>=&&str[i+]<=)
{
number=number*+(str[i+]-);
i++;
}
if(t=='s')
{
number=sin(number);
num.push(number);
}
else if(t=='t')
{
number=tan(number);
num.push(number);
}
else if(t=='c')
{
number=cos(number);
num.push(number);
}
i++;
}
else if(str[i]=='l')
{
char t=str[i+];
i=i+;
number=str[i]-;
while(str[i+]>=&&str[i+]<=)
{
number=number*+(str[i+]-);
i++;
}
if(t=='g')
{
number=log10(number);
num.push(number);
}
else if(t=='n')
{
number=log(number);
num.push(number);
}
i++;
}
}
while(chr.size()>&&chr.size()<&&num.size()!=)
{
char temp=chr.top();chr.pop();
double x=num.top();num.pop();
double y=num.top();num.pop();
double n=;
if(temp=='+')
n=x+y;
else if(temp=='-')
n=y-x;
else if(temp=='(')
continue;
num.push(n);
}
printf("%lf",num.top());cout<<endl;
}
return ;
}

BUPT复试专题—解析表达式(2015)的更多相关文章

  1. BUPT复试专题—List(2015)

    题目描述 在该LIST上实现3种操作 1.append x在该LIST末尾添加x,x是32位整数 2.pop删除该LIST末尾的数 3.find i寻找第i个数,若i为负数表示寻找倒数第i个数,例如i ...

  2. BUPT复试专题—图像压缩存储(2015)

    题目描述 以二维数组表示图像,其值只有0.1两种,寻找两幅图像中最大的相同方阵   输入 第一行输入一个n,接下来的2n行输入两个n*n数组,寻找一个最大的m*m子区域,使得两个数组在该子区域完全相同 ...

  3. BUPT复试专题—求导数(2015)

    题目描述 描述:求函数f(x) = a*x^3 + b*x^2 + c*x + d在x = x0处的一阶导数.   输入 数据第一行是数据的组数m 接下来m行的每一行分别是 a b c d x0 输出 ...

  4. BUPT复试专题—字符串转换(2013计院)

    题目描述 我们将仅由若干个同一小写字母构成的字符串称之为简单串,例如"aaaa"是一个简单串,而"abcd"则不是简单串.现在给你一个仅由小写字母组成的字符串, ...

  5. BUPT复试专题—统计时间间隔(2013计院)

    题目描述 给出两个时间(24小时制),求第一个时间至少要经过多久才能到达第二个时间.给出的时间一定满足的形式,其中x和y分别代表小时和分钟.0≤x<24,0≤y<60. 输入格式 第一行为 ...

  6. BUPT复试专题—最值问题(2013计院)

    题目描述 给出N个数,求出这N个数中最大值和次大值.注意这里的次大值必须严格小于最大值.输入保证N个数中至少存在两个不同的数. 输入格式 第一行为测试数据的组数T(T≤20).请注意,任意两组测试数据 ...

  7. BUPT复试专题—数据库检索(2014软院)

    题目描述 在数据库的操作过程中,我们进场会遇到检索操作.这个题目的任务是完成一些特定格式的检索,并输出符合条件的数据库中的所有结果. 我们现在有一个数据库,维护了学生的姓名(Name),性别(Sex) ...

  8. BUPT复试专题—最近公共祖先(2014软院)

    题目描述 给出一棵有N个节点的有根树TREE(根的编号为1),对于每组查询,请输出树上节点u和v的最近公共祖先. 最近公共祖先:对于有向树TREE的两个结点u,v.最近公共祖先LCA(TREE u,v ...

  9. BUPT复试专题—最长连续等差子数列(2014软院)

    题目描述   给定-个长度为N的整数数列,你需要在其中找到最长的连续子数列的长度, 并满足这个子数列是等差的.注意公差小于或等于0的情况也是允许的. 输入 第一行为数据组数T(1~100),表示测试数 ...

随机推荐

  1. 获取struts迭代list在页面显示的数据

    js代码: function modifyPactMoney(){ var table=$("#pactfee"); var trs=table.find("tr&quo ...

  2. jQuery重置单选框和input框

    取消选中单选框radio,第一种,第二种方式是使用jQuery实现的,第三种方式是基于JS和DOM实现的,大家可以看看下面的示例 本文提供了三种取消选中radio的方式,代码示例如下: 本文依赖于jQ ...

  3. BZOJ 1207

    1207: [HNOI2004]打鼹鼠 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3089  Solved: 1499[Submit][Statu ...

  4. GenericAPIView类与几个扩展类的综合使用

    五个扩展类 扩展类 作用 封装的方法 状态码(成功,失败) ListModelMixin 查询多条数据 list 200 CreateModelMixin 新增一条数据 create 201,400 ...

  5. 《锋利的JQuery》读书要点笔记3——事件和动画

    第四章 jQuery中的事件和动画 JS和HTML的交互是通过用户和浏览器操作页面时引发的事件来处理的,事件由浏览器自动生成. 4.1 jQuery中的事件 1. 加载DOM 这里主要是搞明白wind ...

  6. rertful规范

    RESTful API的理解 断言 assert 条件(True)执行下面代码 assert 条件(False) 报错 什么是接口? 1- URL,用于进行系统之间操作数据. 2- 面向对象接口,用于 ...

  7. rosbag使用--记录深度相机数据

    首先看一下教程: http://wiki.ros.org/openni_launch/Tutorials/BagRecordingPlayback 知道了rosbag如何进行使用记录深度数据 但是按照 ...

  8. 为当前用户创建cron服务

    为当前用户创建cron服务 1.  键入 crontab  -e 编辑crontab服务文件 例如 文件内容如下: */2 * * * * /bin/sh /home/admin/jiaoben/bu ...

  9. AC日记——LOOPS hdu 3853

    3853 思路: 概率dp求期望: 代码: #include <cstdio> #include <cstring> #include <iostream> usi ...

  10. tomcat虚拟主机

    直接看配置文件吧,有点基础的都懂 <Host name="localhost" appBase="webapps" unpackWARs="fa ...