九度OJ 1019 简单计算器
来源:互联网 发布:手机怎么创造软件 编辑:程序博客网 时间:2024/04/30 01:44
题目链接: http://ac.jobdu.com/problem.php?pid=1019
题目分析:
使用两个栈,一个存储数字数据,一个存储操作符号。判断*和/的时候,不入栈,直接通过判断计算前后数字乘除法操作后的值,顺序入数字栈。操作符栈最后只存储+和-符号。
都入栈完毕之后,由于是中缀表达式计算,计算顺序从左至右,这就需要将栈中数据逆置,采用导出到数组的方法。导出完毕后,依次从左至右开始计算,即可解决。
源代码:
#include <iostream>#include <iomanip>#include <stack>#include <stdlib.h>#include <stdio.h>using namespace std;int main(){stack<double> SD;//数字栈stack<char> SO;//操作符栈double left, right;//退栈时存储栈头数字int num;//输入数字char op;//输入操作符double data[1000];//数字数组char operate[1000];//操作符数组while (cin>>num)//读入开始数字{op = getchar();//读取数字后输入的字符if (num == 0 && op == '\n')//输入0后,退出{break;}SD.push(num);while (op == ' ')//数字后要跟空格{op = getchar();//读取空格后的操作符if (op == '\n')//输入回车后,程序结束{break;}if (!SO.empty() && (SO.top() == '*' || SO.top() == '/')){right = SD.top();SD.pop();left = SD.top();SD.pop();if (SO.top() == '*'){SD.push(left * right);}if (SO.top() == '/'){SD.push(left / right);}SO.pop();}SO.push(op);cin>>num;SD.push(num);op = getchar();//下一轮循环判断}if (SO.top() == '*' || SO.top() == '/'){right = SD.top();SD.pop();left = SD.top();SD.pop();if (SO.top() == '*'){SD.push(left * right);}else if (SO.top() == '/'){SD.push(left / right);}SO.pop();}//将堆栈数据保存到保存到数组中,从左向右计算int i = 0;int oplength, datalength;//栈内数据长度int optop, datatop;while (!SO.empty()){operate[i++] = SO.top();SO.pop();}oplength = i;optop = i - 1;i = 0;while (!SD.empty()){data[i++] = SD.top();SD.pop();}datalength = i;datatop = i - 1;for (int j = optop; j >= 0; j--){if (operate[j] == '+'){data[datatop - 1] = data[datatop] + data[datatop - 1];datatop --;}else if (operate[j] == '-'){data[datatop - 1] = data[datatop] - data[datatop - 1];datatop --;}}cout.setf(ios::fixed);cout<<setprecision(2)<<data[0]<<endl;}return 0;}
- 九度OJ 1019 简单计算器
- 九度oj 题目1019:简单计算器
- 九度oj-1019:简单计算器
- 九度OJ-题目1019:简单计算器
- 九度oj-1019-简单计算器
- 九度OJ 1019:简单计算器
- 九度OJ-1019-简单计算器
- 九度OJ 题目1019:简单计算器
- 九度OJ-1019简单计算器
- <九度 OJ>题目1019:简单计算器
- 九度OJ 题目1019:简单计算器
- 九度OJ 1019 简单计算器
- 【九度oj】1019简单计算器
- 九度 OJ 题目1019:简单计算器
- 九度OJ-题目1019 简单计算器
- 九度OJ题目1019:简单计算器
- 题目1019:简单计算器 九度OJ
- 九度OJ—题目1019:简单计算器
- android如何改变系统默认横竖屏方向
- 排序算法总结
- 给Qt工程生成的可执行文件添加图标
- 虚函数和虚继承及其在内存中布局
- 给Qt窗体添加图标
- 九度OJ 1019 简单计算器
- 给Qt程序设置默认皮肤
- android 之判断某个应用是否已经启动
- Defer loading of JavaScript 延时加载Javascript
- php curl 代理 抓取数据
- Android 系统属性SystemProperty分析
- zxccvsdad
- VB.NET异常处理
- ZOJ 2540 Form a Square