hdu1237 简单计算器 (模拟+栈)

网友投稿 247 2022-09-06

hdu1237 简单计算器 (模拟+栈)

简单计算器

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 15075    Accepted Submission(s): 5132

Problem Description

读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。

Input

测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。

Output

对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。

Sample Input

1 + 2 4 + 2 * 5 - 7 / 11 0

Sample Output

3.00 13.36

Source

​​浙大计算机研究生复试上机考试-2006年​​

Recommend

JGShining   |   We have carefully selected several similar problems for you:   ​​1230​​​  ​​​1235​​​  ​​​1228​​​  ​​​1248​​​  ​​​1256​​

​​Statistic​​ |

​​Submit​​ |

​​Discuss​​ |

​​Note​​

这道题 我竟无言以对。。

其实也就是模拟计算器。因为这里没有小括号 很简单。只需要判断当前运算符和下一个运算符的优先级

就行,分别用两个栈存贮数字和符号,我用的数组。

我就是因为一个数据不对 而且我也找不出来。。浪费了N多时间。

有几个注意的地方

1:如果输入的第一个数字是0 例如0 + 2 + 3应该输出5.00 而不是结束

2:如果输入的是0(空格)(换行)应该输出0.00(我错在了这里。。气死了)

3.   数字可能是两位及两位以上

最后换换输入方式 就对了。附上wa和ac的代码

ac:

#include #include int main(){ char fuhao[100],str[205]; double num[100],sum; while(gets(str)&&strcmp(str,"0")!=0) { int len=strlen(str); int t=0,q=0; memset(num,0,sizeof(num)); memset(fuhao,0,sizeof(fuhao)); for(int i=0;i='0'&&str[i]<='9') { double temp=0; while(str[i]>='0'&&str[i]<='9') temp=temp*10+str[i]-'0',i++; num[q++]=temp; } if(str[i]=='+'||str[i]=='-'||str[i]=='*'||str[i]=='/') fuhao[t++]=str[i]; } memset(str,0,sizeof(str)); sum=num[0]; for(int i=1;i

wa的,就是输入的地方不一样

#include #include int main(){ char fuhao[200]; double num[200],sum; while(scanf("%lf",&sum)!=EOF) { char mark=getchar(); if(mark=='\n'&&sum==0) { printf("%.2lf\n",sum); continue; } memset(fuhao,0,sizeof(fuhao)); memset(num,0,sizeof(num)); int t=0; while(1) { scanf("%c",&fuhao[t]); scanf("%lf",&num[t]); mark=getchar(); if(mark=='\n') break; t++; } for(int i=0;i<=t;i++) { if(fuhao[i]=='*') sum=sum*num[i]; else if(fuhao[i]=='/') sum=sum/num[i]; else if(fuhao[i]=='+') { if(fuhao[i+1]=='*'||fuhao[i+1]=='/') { double temp=num[i]; while((fuhao[i+1]=='*'||fuhao[i+1]=='/')&&i+1<=t) { if(fuhao[i+1]=='*') temp=temp*num[i+1]; else temp=temp/num[i+1]; i++; } sum=sum+temp; } else sum=sum+num[i]; } else if(fuhao[i]=='-') { if(fuhao[i+1]=='*'||fuhao[i+1]=='/') { double temp=num[i]; while((fuhao[i+1]=='*'||fuhao[i+1]=='/')&&i+1<=t) { if(fuhao[i+1]=='*') temp=temp*num[i+1]; else temp=temp/num[i+1]; i++; } sum=sum-temp; } else sum=sum-num[i]; } } printf("%.2lf\n",sum); } return 0;}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:蜜雪冰城的营销套路,其实户外广告早就玩过了!
下一篇:hdu1176 免费馅饼 ( 数塔(DP))
相关文章

 发表评论

暂时没有评论,来抢沙发吧~