#include<iostream>
#include<stack>
#include<cmath>
using namespace std;
char ch; bool f(char t)
{
if(t=='+'||t=='-'||t=='*'||t=='/'||t=='('||t==')'||t=='=')
return ;
return ;
} double cal(double t1,double t2,char c)
{
switch(c)
{
case '+':return t1+t2;
case '-':return t1-t2;
case '*':return t1*t2;
case '/':return t1/t2;
}
return ;
} int cmp(char t1,char t2)
{
int q1=,q2=;
switch(t1)
{
case '+':q1=;break;
case '-':q1=;break;
case '*':q1=;break;
case '/':q1=;break;
case '(':q1=;break;
case ')':q1=-;break;
}
switch(t2)
{
case '+':q2=;break;
case '-':q2=;break;
case '*':q2=;break;
case '/':q2=;break;
case '(':q2=;break;
case ')':q2=-;break;
}
if(q1==-&&q2==)
return ;
if(q1>q2)
return ;
if(q1<=q2)
return ;
return -;
} double z()
{
double ans=;
int a[],i=,flag=;
a[++i]=ch-'';
while(cin>>ch&&!f(ch))
{
if(ch=='.')
{
flag=i;
continue;
}
a[++i]=ch-'';
}
if(flag==)
flag=i;
for(int j=;j<=i;j++)
{
ans+=a[j]*pow(,flag-j);
}
return ans;
} int main()
{
stack<double> OPND;//存放数字
stack<char> OPTR;//存放运算符
double t1,t2,t3;
while(cin>>ch&&ch!='=')
{
if(f(ch))
{
OPTR.push(ch);
cin>>ch;
}
else
{
OPND.push(z());
}
while(ch!='=')
{
if(f(ch))
{
if(OPTR.empty())
{
OPTR.push(ch);
cin>>ch;
continue;
}
if(cmp(ch,OPTR.top())==)//后出现的优先级小,存储
{
OPTR.push(ch);
cin>>ch;
continue;
}
else if(cmp(ch,OPTR.top())==)//后出现的优先级大,计算
{
char c1=ch;
cin>>ch;
t2=z();
t1=OPND.top();
OPND.pop();
t3=cal(t1,t2,c1);
OPND.push(t3);
}
else
{
OPTR.pop();
cin>>ch;
}
}
else
{
OPND.push(z());
}
}
while(!OPTR.empty())
{
ch=OPTR.top();
OPTR.pop();
t2=OPND.top();
OPND.pop();
t1=OPND.top();
OPND.pop();
t3=cal(t1,t2,ch);
OPND.push(t3);
}
printf("%.2lf\n",OPND.top());
OPND.pop();
getchar();
}
return ;
}

重点大概在于数据接收

最新文章

  1. 连接 insance 到 vlan101 - 每天5分钟玩转 OpenStack(97)
  2. 转:xampp-php5.6下安装memcached.exe
  3. java math library
  4. windows进程详解
  5. 生成.a文件步骤
  6. 软件工程课后作业——四则运算Ⅲ(C++)
  7. Gym 100187B-A Lot of Joy
  8. Foundation Sorting: Quicksort
  9. el 表达式遍历Map
  10. test request&amp;&amp;response 代码实现
  11. Taro开发写密码支付弹层
  12. Maven使用(一)—— Maven的安装与全局配置
  13. JDK下载-安装-配置
  14. linux中断源码分析 - 中断发生(三)
  15. 【转载】 强化学习(三)用动态规划(DP)求解
  16. java学习之浅谈多线程4--SwingWorker
  17. a标签点击时跳出确认框
  18. 怎么使用Vue-cli3开发像iview、element那样的组件可下载直接使用
  19. vsftpd的530 Login incorrect错误解决方法 vsftpd登录错误
  20. Python模块-shelve模块

热门文章

  1. 学习andriod开发之 异步加载图片(二)--- 使用其他进度条
  2. 关于自定义sparkSQL数据源(Hbase)操作中遇到的坑
  3. vue事件.navtive 的使用
  4. EBS GL 日记账行“账户说明”段说明显示不全
  5. koa 基础(十一)koa 中 koa-bodyparser 中间件获取表单提交的数据
  6. 通过merge语句完成表数据同步
  7. TP框架如何绑定参数。目的进行ajax验证
  8. Java快排
  9. GitHub-Microsoft:sql-server-samples
  10. SQLSERVER大批量数据快速导入Redis