这是单纯的本题答案;
#include
#define N 1100
int main()
{
int a,j,i;
double Sum[N],sum;
char c1,c2,c;
while(scanf("%d",&a)!=EOF)
{
sum=;
Sum[]=a;
c=getchar();
j=;
if(a==&&c!=' ')
break;
while(scanf("%c %d%c",&c1,&a,&c2)!=EOF)
{
if(c1=='+')
Sum[j++]=1.0*a;
else if(c1=='-')
Sum[j++]=-1.0*a;
else if(c1=='*')//注意区分Sum[j--]*=a与Sum[j-1]*=m;
Sum[j-]*=a;
else if(c1=='/')
Sum[j-]/=(1.0*a);
if(c2!=' ')
break;
}
for(i=;i
sum+=Sum[i];
printf("%.2lf\n",sum);
}
}
后来用栈写了一下,大话数据结构中关于前缀表达式和后缀表达式讲的很清楚, 下面是一个可以包含括号的
一种不需要括号的后缀表达法,成为逆波兰表达式,也叫后缀表达式
标准的四则运算表达式,即"9+(3-1)*3+10/2"叫做中缀表达式
将中缀表达式转换为后缀表达式的规则:
从左到右遍历中缀表达式的每个数字和符号,若是数字就输出,即成为后缀表达式的一部分;若是符号,则判断其与栈顶符号的优先级,是右括号或优先级不高于栈顶符号(乘除优先加减)则栈顶元素依次出栈并输出,并将当前符号进栈,一直到最终输出后缀表达式为止。
#include
#include
#include
#include
#include
#include
#define N 110
#define met(a, b) memset(a, b, sizeof(a))
using namespace std;
stack F;
stack num;
int J(char ch)
{
if(ch == '+' || ch == '-')return ;
if(ch == '*' || ch == '/')return ;
if(ch == '(' || ch == ')')return ;
return ;
}
double slo(double a, double b, char ch)
{
if(ch == '+')return a+b;
if(ch == '-')return a-b;
if(ch == '*')return a*b;
return a/b;
}
void slove()
{
double a = num.top(); num.pop();
double b = num.top(); num.pop();
char ch = F.top(); F.pop();
double m = slo(b, a, ch);
num.push(m);
}
int main()
{
char s[N];
while(gets(s), strcmp(s, ""))
{
while(F.size())F.pop();
while(num.size())num.pop();
int len = strlen(s);
for(int i=; i
{
if(s[i]>='' && s[i]<='')
{
double m = ;
while(i='' && s[i]<='')
{
m = m* + s[i]-'';
i++;
}
if(i!=len)i--;
num.push(m);
}
else if(J(s[i]))
{
while(F.size() && J(s[i])!= && J(F.top())!= && J(s[i]) <= J(F.top()) ) slove();
if(s[i] != ')')F.push(s[i]);
else
{
while( F.top()!='(' )slove();
F.pop();
}
}
}
while(F.size())slove();
printf("%.2f\n", num.top());
}
return ;
}
hdu1237 简单计算器[STL 栈]
目录 题目地址 题干 代码和解释 参考 题目地址 hdu1237 题干 代码和解释 解本题时使用了STL 栈,要记得使用#include. 解本题时使用了isdigit()函 ...
HDU1237 简单计算器 【栈】+【逆波兰式】
简单计算器 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
hdu 1237 简单计算器(栈处理)
简单计算器 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
HDU 1237 简单计算器(栈+stringstream)
提供几份代码,这题的输入可以用stringsteam处理,先处理乘除后处理加减,正常思路,但是后面统计加减法的时候,对栈的运用错了,我用的时候相当于给它多加了几个括号就错了. 正确的简单解法就是,加法 ...
hiho #1332 : 简单计算器 栈+递归
#1332 : 简单计算器 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 编写一个程序可以完成基本的带括号的四则运算.其中除法(/)是整除,并且在负数除法时向0取整.( ...
F - 简单计算器(栈)
F - 简单计算器 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descripti ...
hdoj 1237 简单计算器
简单计算器 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
简单计算器 (c语言课程设计)
可以实现简单的加减乘除四则运算 #include #include #define MAX 10100 int main() { int ...
随机推荐
ubuntu14.04禁用自动待机保持屏幕亮度
http://jingyan.baidu.com/article/9989c7461fd041f648ecfe05.html
jQuery Ajax传递数组到asp.net web api参数为空
前端: var files = []; files.push({ FileName: "1.jgp", Extension: ".jgp", FileType: ...
codingNet项目的创建
首先,在codingNet上面创建一个项目(一般情况下) 然后,在本地打开项目并添加到储存库 其次,提交代码到已经创建好的项目中(注意赋值远程存储库的路径)
Spring IOC整理
示例展示 Spring的一大特点是利用配置的xml文件实现依赖注入. 所谓依赖注入是指把一个业务对象注入另一个业务对象,从而达到对象间的松耦合.(注意是业务对象哦!)依赖注入讲的通俗一点,就是让一个对 ...
Jquery 查看DOM上绑定的事件列表
$(dom).data( "events" ); 包括事件类型和关联的处理函数 下面是firefox的截图
asp.net mvc vs web form
译者介绍 小小.NET学童,滴答…滴答…的雨…… 正文如下======================================================= 原文示例(VS2012): 1 ...
实现jsp页面显示用户登录信息,利用session保存。
这是后台代码 这是jsp代码,上面是声明,下面是获得值.
初探JavaScript魅力(五)
JS简易日历 innerHTML
无标题文档利用 VMWare 搭建随机拓扑网络
这篇文章是计算机网络上机实验课的作业. 实验任务:利用 VMWare 搭建一个由 5 个主机组成的随机拓扑的网络.要求该网络中至少有 2 个子网,两个路由器 .实验的网络拓扑图如下: 网络中有两个路由 ...
java 对象转JSON字符串 $ref 错误
顾名思义,这个是对象转Json时,发生的引用错误. 比较简单的方法是: 使用 帮助方法 https://www.cnblogs.com/hanjun0612/p/9779781.html Conver ...