c++简单计算器
来源:互联网 发布:java获取request对象 编辑:程序博客网 时间:2024/06/05 14:10
问题 C: 某计算器的超电磁炮
时间限制: 1 Sec
内存限制: 64 MB
提交状态
题目描述
输入由非负整数、+、-、*、/、(、)组成的计算表达式,计算该表达式的值。
输入
每个输入文件中一组数据。
输入只有一行,不超过200个字符,其中不存在空格。数据保证表达式一定合法,且所有的整数都不小于0、不大于1024。中间结果保证不超过15位有效数位精度。
输出
输出一行,即表达式的值,结果精度保留小数点后2位。
样例输入
3+(12/(2*2+1))
样例输出
5.40
这道题其实是大一下学期学C++的时候上机的一道题,今晚练习赛写了一个钟多,没能AC,参考了一下以前的代码,感慨自己脑力确实不如从前了,也说不定自己四年从来都没强过。好吧,后天机试,学渣继续加油~
#include <iostream>#include <cstdio>#include <vector>#include <string>#include <cmath>#include <queue>#include <algorithm>#include <stack>#include <cstring>#include <set>#include <map>using namespace std;stack<char> op;stack<double> num;bool valid(char c) { if (op.empty()) return false; if (op.top() == '(') return false; if (c == '+' || c == '-') return true; if (c == '*' && (op.top() == '*' || op.top() == '/')) return true; if (c == '/' && (op.top() == '*' || op.top() == '/')) return true; else return false;}void exe() { double result; double b = num.top(); num.pop(); double a = num.top(); num.pop(); char c = op.top(); op.pop(); switch (c) { case '+': result = a + b; break; case '-': result = a - b; break; case '*': result = a * b; break; case '/': result = a / b; break; } num.push(result);}int main() {string str;cin >> str;int temp = 0;for (int i = 0; i < str.length(); i++) {if (str[i] >= '0' && str[i] <= '9') {temp = temp * 10 + str[i] - '0';if (i + 1 == str.length() || !(str[i + 1] >= '0' && str[i + 1] <= '9')) {num.push(temp);temp = 0;}} else if (str[i] == '+' || str[i] == '-' || str[i] == '*' || str[i] == '/') {while (valid(str[i])) {exe();}op.push(str[i]);} else if (str[i] == '(') {op.push('(');} else if (str[i] == ')') {while (op.top() != '(') {exe();}op.pop();}}printf("%.2lf\n", num.top());return 0;}
0 0
- 简单计算器实现(C++)
- c-简单的计算器
- ANTLR实现简单计算器[C#]
- 《简单计算器实现(c#)》
- c 语言简单计算器源码
- 简单计算器(objective-c)
- c/c++实现简单计算器
- C语言之简单计算器
- 用C语言设计一个简单计算器
- 一个简单的计算器程序(C++)
- C写的简单文本计算器
- 一个简单的计算器(C语言)
- 一个简单计算器的c程序
- C语言实现一个简单的计算器
- c写的一个简单的计算器
- 简单工厂模式的计算器(C++)
- [C++]算术计算器 简单计算+科学计算
- 简单到死的计算器C编程
- ubuntu下多个gcc编译器的安装及切换
- JAVA IO学习笔记
- .Net遇到的问题以及解决方法
- .Net遇到的问题以及解决方法
- android属性动画基础
- c++简单计算器
- LeetCode第一题:Two Sum
- 61. Rotate List(unsolved)
- android全屏启动页[解决黑屏白屏]
- java 内存泄漏
- Mybatis中配置Mapper的方法
- hadoop mapreduce
- Unity3D之Mecanim动画系统学习笔记(九):Blend Tree(混合树)
- 学习python[3] python 读取中文文件名/中文路径