codeup 1918 简单计算器
//codeup 1918
#include <iostream>
#include <cstdio>
#include <string>
#include <stack>
#include <queue>
#include <map>using namespace std;struct node{double num; //操作数char op; //操作符bool flag; //true代表操作数,false代表操作符
};string srt;
stack<node> s; //操作符栈
queue<node> q; //后缀表达式序列
map<char, int> op; //void Change() //将中缀表达式转换为后缀表达式
{double num;node temp;for(int i =0 ; i < str.length();){if(str[i] >= '0' && str[i] <= '9') //如果是数字{temp.flag = true; //标记为数字temp.num = str[i++] - '0'; //记录这个操作数的第一个数位while(i < str.length() && str[i] >= '0' && str[i] <= '9'){temp.num = temp.num *10 + (str[i] - '0'); //更新这个操作数i++;}q.push(temp); //将这个操作数压入后缀表达式的队列}else //如果是操作符{temp.flag = false; //标记是操作符//只要操作符栈的栈顶元素比该操作符优先等级高//就把操作符栈的栈顶元素弹出到后缀表达式的队列中while(!s.empty() && op[str[i] <= op[s.top().op]){q.push(s.pop());s.pop();}temp.op = str[i];s.push(temp); //把该操作符压入操作栈中i++;}}//如果操作符栈中还有操作符,就把它弹出到后缀表达式队列中while(!s.empty()){q.push(s.top());s.pop();}
}double Cal() //计算后缀表达式
{double temp1, temp2;node cur, temp;while(!q.empty()) //只要后缀表达式非空{cur = q.front(); //cur记录队首元素q.pop();if(cur.flag == true)s.push(cur); //如果是操作数,直接入栈else //如果是操作符{temp2 = s.top().num; //弹出第二操作数s.pop();temp1 = s.top().num; //弹出第一操作数s.pop();temp.flag = true; //记录临时操作数if(cur.op == '+') //加法temp.num = temp1 + temp2;else if(cur.op == '-') //减法temp.num = temp1 - temp2;else if(cur.op == '*') //乘法temp.num = temp1 * temp2;else //除法temp.num = temp1 / temp2;s.push(temp); //把该操作数压入栈}}return s.top().num; //栈顶元素就是后缀表达式的值
}int main()
{op['+'] = op['-'] = 1; //设定操作符的优先级op['*'] = op['/'] = 2;while(getline(cin, str), str != "0"){for(string::iterator it = str.end(); it != str.begin(); it--){if(*it == '')str.erase(it); //吧表达式中的空格全部去掉}while(!s.empty())s.pop(); //初始化栈Change(); //将中缀表达式转换为后缀表达式printf("%2f\n", Cal()); //计算后缀表达式}return 0;
}
codeup 1918 简单计算器相关推荐
- 1918 Problem A 简单计算器
问题 A: 简单计算器 时间限制: 1 Sec 内存限制: 32 MB 提交: 367 解决: 175 题目描述 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. 输入 ...
- 模拟一个简单计算器_阅读模拟器的简单介绍
模拟一个简单计算器 Read simulators are widely being used within the research community to create synthetic an ...
- PTA 基础编程题目集 7-12 两个数的简单计算器 C语言
PTA 基础编程题目集 7-12 两个数的简单计算器 C语言 本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加.减.乘.除或求余运算.题目保证输入和输出均不超过整型范围. 输入格式 ...
- 7-12 两个数的简单计算器 (C语言)
7-12 两个数的简单计算器 (10 分)本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加.减.乘.除或求余运算.题目保证输入和输出均不超过整型范围. 输入格式: 输入在一行中依次 ...
- 用Python解“两个数的简单计算器”题
7-12 两个数的简单计算器 本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加.减.乘.除或求余运算.题目保证输入和输出均不超过整型范围. 输入格式: 输入在一行中依次输入操作数1 ...
- 用C语言解“两个数的简单计算器”题
7-12 两个数的简单计算器 本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加.减.乘.除或求余运算.题目保证输入和输出均不超过整型范围. 输入格式: 输入在一行中依次输入操作数1 ...
- 06-1. 简单计算器(20)
06-1. 简单计算器(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 张彤彧(浙江大学) 模拟简单运算器的工作.假设计算器只 ...
- c语言对10求余不为7,【PTA | 基础编程题目集】7-12 两个数的简单计算器 (10分)
本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加.减.乘.除或求余运算.题目保证输入和输出均不超过整型范围. 输入格式: 输入在一行中依次输入操作数1.运算符.操作数2,其间以1个 ...
- 重读The C programming Lanuage 笔记三:简单计算器程序
1 //简单计算器 2 3 #include <stdio.h> 4 #include <stdlib.h> 5 #include <ctype.h> 6 #inc ...
最新文章
- ssm框架的整合搭建(一)
- xml不利于调试_流利的接口不利于维护
- 【原】.Net创建Excel文件(插入数据、修改格式、生成图表)的方法
- python中if for 作用域问题
- Android安全之应用签名验证
- 国产Model 3高性能版规格公布:充电15分钟续航250公里
- Python3批量转换文本文件编码
- 如何在centos中找到安装mysql_如何在CentOS 7上安装MySQL
- java和scala_什么是Scala及它与Java的区别
- 实用!Mybatis中trim标签的使用教程
- banner 获取当前指示物_ConvenientBanner使用指南
- 儿童python编程教程-一款儿童编程入门的理想工具——PythonTurtle
- 紫猫插件php,简易中控紫猫插件版(3)压缩包使用说明
- Hackintosh-OpenCore系列篇-Windows install
- python 分析泰坦尼克号生还率_泰坦尼克号上谁的生存几率更大?Kaggle 金牌得主 Python 数据挖掘框架发现真相...
- Gentoo Linux+KDE Plasma桌面安装教程
- java jnlp 运行_JNLP文件如何能成功安装运行?
- 数据库实验--存储过程实验
- mac apache 重启
- 4.Python中的字符串整理总结