//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 简单计算器相关推荐

  1. 1918 Problem A 简单计算器

    问题 A: 简单计算器 时间限制: 1 Sec 内存限制: 32 MB 提交: 367 解决: 175 题目描述 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. 输入 ...

  2. 模拟一个简单计算器_阅读模拟器的简单介绍

    模拟一个简单计算器 Read simulators are widely being used within the research community to create synthetic an ...

  3. PTA 基础编程题目集 7-12 两个数的简单计算器 C语言

    PTA 基础编程题目集 7-12 两个数的简单计算器 C语言 本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加.减.乘.除或求余运算.题目保证输入和输出均不超过整型范围. 输入格式 ...

  4. 7-12 两个数的简单计算器 (C语言)

    7-12 两个数的简单计算器 (10 分)本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加.减.乘.除或求余运算.题目保证输入和输出均不超过整型范围. 输入格式: 输入在一行中依次 ...

  5. 用Python解“两个数的简单计算器”题

    7-12 两个数的简单计算器 本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加.减.乘.除或求余运算.题目保证输入和输出均不超过整型范围. 输入格式: 输入在一行中依次输入操作数1 ...

  6. 用C语言解“两个数的简单计算器”题

    7-12 两个数的简单计算器 本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加.减.乘.除或求余运算.题目保证输入和输出均不超过整型范围. 输入格式: 输入在一行中依次输入操作数1 ...

  7. 06-1. 简单计算器(20)

    06-1. 简单计算器(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 张彤彧(浙江大学) 模拟简单运算器的工作.假设计算器只 ...

  8. c语言对10求余不为7,【PTA | 基础编程题目集】7-12 两个数的简单计算器 (10分)

    本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加.减.乘.除或求余运算.题目保证输入和输出均不超过整型范围. 输入格式: 输入在一行中依次输入操作数1.运算符.操作数2,其间以1个 ...

  9. 重读The C programming Lanuage 笔记三:简单计算器程序

    1 //简单计算器 2 3 #include <stdio.h> 4 #include <stdlib.h> 5 #include <ctype.h> 6 #inc ...

最新文章

  1. ssm框架的整合搭建(一)
  2. xml不利于调试_流利的接口不利于维护
  3. 【原】.Net创建Excel文件(插入数据、修改格式、生成图表)的方法
  4. python中if for 作用域问题
  5. Android安全之应用签名验证
  6. 国产Model 3高性能版规格公布:充电15分钟续航250公里
  7. Python3批量转换文本文件编码
  8. 如何在centos中找到安装mysql_如何在CentOS 7上安装MySQL
  9. java和scala_什么是Scala及它与Java的区别
  10. 实用!Mybatis中trim标签的使用教程
  11. banner 获取当前指示物_ConvenientBanner使用指南
  12. 儿童python编程教程-一款儿童编程入门的理想工具——PythonTurtle
  13. 紫猫插件php,简易中控紫猫插件版(3)压缩包使用说明
  14. Hackintosh-OpenCore系列篇-Windows install
  15. python 分析泰坦尼克号生还率_泰坦尼克号上谁的生存几率更大?Kaggle 金牌得主 Python 数据挖掘框架发现真相...
  16. Gentoo Linux+KDE Plasma桌面安装教程
  17. java jnlp 运行_JNLP文件如何能成功安装运行?
  18. 数据库实验--存储过程实验
  19. mac apache 重启
  20. 4.Python中的字符串整理总结

热门文章

  1. MacOSX下的BaiduPCS-Go的安装及使用说明
  2. MySQL索引优化分析
  3. Intellij IDEA社区版集成Maven插件
  4. 如何在MySQL中创建新用户并授予权限
  5. 【WPF学习】第四十九章 基本动画
  6. Docker 安装MongoDB 以及 相关配置文件、数据文件映射
  7. js 定位当前城市之接口定位(搜狐、新浪、百度、腾讯API)
  8. C#LeetCode刷题之#100-相同的树(Same Tree)
  9. linux把标准输出赋值给变量遇到的问题
  10. comptia a+_我如何通过CompTIA Linux +考试