额,题目是中文的,题意就不用说了= =都看懂喽。写个字符串先把这行计算式存进去,不过不能存一个算一个,因为考虑到乘除法比加减法优先的原则,如果是加号减号就先存着等待计算,如果是乘号除号就直接算出来值就好了。然后,就想到了栈的思想了,写两个栈一个存符号一个存数字,如果是加减号留在栈里,如果是乘除号就直接运算完,符号不再入栈,数字直接得出结果再存入,这样第一遍循环过后就只剩下加减法了,不过这时候还不能直接算,因为栈里再出来的话是反的= =所以再写两个栈出来,把之前的内容反过来再运算就能得到结果了。

表示一开始代码写乱了,然后乘法加法什么的混一块看的麻烦,懒得改所以又重写了一遍= =这一次写加上了注释,清楚多了,看来写注释很关键啊,至少改的时候好找位置......

下面AC代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stack>
using namespace std;
char s[];
stack<double>ds;
stack<char>mj;
stack<double>zs;
stack<char>hj; int main()
{
int len;
int i,j;
int sig;
double a,b;
double sum;
char c;
while()
{
gets(s);
if(strcmp(s,"")==)
break;
len=strlen(s);
for(i=;i<len;i++)
{
if(s[i]==' ')
continue;
//如果是加减法的话,先放进去,等着
else if(s[i]=='+'||s[i]=='-')
{
mj.push(s[i]);
}
//如果是乘除法的话,拉出前一个数进行计算
else if(s[i]=='*'||s[i]=='/')
{
if(s[i]=='*')
sig=;
else
sig=;
a=ds.top();
ds.pop();
b=;
for(i=i+;i<len;i++)
{
if(s[i]==' ')
break;
b=b*+(s[i]-'');
}
if(sig==)
{
a=a*b;
ds.push(a);
}
else
{
a=a/b;
ds.push(a);
}
}
else if(s[i]>=''&&s[i]<='')
{
a=;
for(;i<len;i++)
{
if(s[i]==' ')
break;
a=a*+(s[i]-'');
}
ds.push(a);
}
}
//如果还有没进行计算的数,进行一下计算
while(!ds.empty())
{
a=ds.top();
ds.pop();
zs.push(a);
}
while(!mj.empty())
{
c=mj.top();
mj.pop();
hj.push(c);
}
sum=zs.top();
zs.pop();
while(!hj.empty())
{
c=hj.top();
hj.pop();
a=zs.top();
zs.pop();
if(c=='+')
sum=sum+a;
else
sum=sum-a;
}
printf("%.2f\n",sum);
}
return ;
}

最新文章

  1. Best way to add Gradle support to IntelliJ Project
  2. 老王讲自制RPC框架.(三.ZOOKEEPER)
  3. 分享10条Visual Studio 2012的开发使用技巧
  4. 基于Winform的.cs文件命名空间排序及注释批量处理工具
  5. Effective Java 65 Don&#39;t ignore exceptions
  6. Android Preview显示
  7. web标准的可用性和可访问性
  8. async await的前世今生
  9. xcode设置项目图标玻璃镜效果
  10. HTML获取用户输入的几种玩法
  11. Google机器学习笔记(七)TF.Learn 手写文字识别
  12. JavaScript 常见陷阱
  13. python中json.loads,dumps,jsonify使用
  14. jfinal的回滚
  15. vba读文本如果文本文件太大会提示错误!
  16. [精品书单]3D打印机课程设计
  17. python3 安装 google-visualization-python(windows10)
  18. javascript获取时间戳
  19. TCP UDP 数据包过大导致分片情况
  20. Linux 系统下 matplotlib 中文乱码解决办法

热门文章

  1. CefSharp .net
  2. 深度解析SDN——利益、战略、技术、实践(实战派专家力作,业内众多专家推荐)
  3. FreeMarker 学习
  4. js const
  5. SQL Pass北京举办第11次线下活动,欢迎报名(本次活动特别邀请了来自微软总部Xin Jin博士)
  6. &lt;C#&gt;找出数组中重复次数最多的数值
  7. POJ 2312Battle City(BFS-priority_queue 或者是建图spfa)
  8. office2010里怎么设置页码为第几页共几页
  9. Deep learning:四十六(DropConnect简单理解)
  10. 一步一步学Python(1) 基本逻辑控制举例和编码风格规范