android栈计算器,简单计算器--hdu1237(栈的运用)

这是单纯的本题答案;

#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 简单计算器&lbrack;STL 栈&rsqb;

目录 题目地址 题干 代码和解释 参考 题目地址 hdu1237 题干 代码和解释 解本题时使用了STL 栈,要记得使用#include. 解本题时使用了isdigit()函 ...

HDU1237 简单计算器 【栈】&plus;【逆波兰式】

简单计算器 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 简单计算器(栈&plus;stringstream)

提供几份代码,这题的输入可以用stringsteam处理,先处理乘除后处理加减,正常思路,但是后面统计加减法的时候,对栈的运用错了,我用的时候相当于给它多加了几个括号就错了. 正确的简单解法就是,加法 ...

hiho &num;1332 &colon; 简单计算器 栈&plus;递归

#1332 : 简单计算器 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 编写一个程序可以完成基本的带括号的四则运算.其中除法(/)是整除,并且在负数除法时向0取整.( ...

F - 简单计算器&lpar;栈&rpar;

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&period;04禁用自动待机保持屏幕亮度

http://jingyan.baidu.com/article/9989c7461fd041f648ecfe05.html

jQuery Ajax传递数组到asp&period;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&period;net mvc vs web form

译者介绍 小小.NET学童,滴答…滴答…的雨…… 正文如下======================================================= 原文示例(VS2012): 1 ...

实现jsp页面显示用户登录信息,利用session保存。

这是后台代码 这是jsp代码,上面是声明,下面是获得值.

初探JavaScript魅力(五)

JS简易日历    innerHTML

无标题文档

利用 VMWare 搭建随机拓扑网络

这篇文章是计算机网络上机实验课的作业. 实验任务:利用 VMWare 搭建一个由 5 个主机组成的随机拓扑的网络.要求该网络中至少有 2 个子网,两个路由器 .实验的网络拓扑图如下: 网络中有两个路由 ...

java 对象转JSON字符串 &dollar;ref 错误

顾名思义,这个是对象转Json时,发生的引用错误. 比较简单的方法是: 使用 帮助方法 https://www.cnblogs.com/hanjun0612/p/9779781.html Conver ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值