寒假Day40:HDU237-简易计算器-栈+getchar()
题面:
读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。 Input 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。 Output 对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
Sample Input 1 + 2 4 + 2 * 5 - 7 / 11 0 Sample Output
3.00 13.36
思路:这一题我一开始其实是gets全部读入,再开数组去空格,之后利用一个for循环取出数字进行处理的,
但是后来搜了一下发现有更简洁的代码,很好的利用了getchar,后来用getchar ac的。
AC代码:
#include<stdio.h> #include<iostream> #include<algorithm> #include<string.h> #include<stack> using namespace std; int main() { double x; while(~scanf("%lf",&x)) { stack<double>s; char ch=getchar(); if(x==0&&ch=='\n') break; s.push(x); ch=getchar();// while(~scanf("%lf",&x)) { if(ch=='+') s.push(x); else if(ch=='-') s.push(x*(-1)); else if(ch=='*') { double y=s.top(); s.pop(); y*=x; s.push(y); } else if(ch=='/') { double y=s.top(); s.pop(); y=y/x; s.push(y); } if(ch=getchar()=='\n')//不能else if//不能放在开始就判断 break; ch=getchar(); // if(ch=='\n') // break; } double ans=0; while(!s.empty()) { ans+=s.top(); s.pop(); } printf("%.2lf\n",ans); } return 0; }
写代码的时候,如果有更简单并且思路更清晰的代码可以去解决,那么就应该去选择改变方法;
解决一个问题的时候,应该是用最简单最简短的代码去实现核心思想,而不是掺杂其他东西在里面
待解决:
最后的for循环里面的getchar不知道为什么不能单独拿出来break,答案是错误的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」