热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

codeup1918简单计算器

问题A:简单计算器题目描述读入一个只包含+,-,*,的非负整数计算表达式,计算该表达式的值。读入一个只包含+,-,*,的非负整数计算表达式,计算该表达式的值。输入测试输入包含若干测

问题 A: 简单计算器

时间限制: 1 Sec  内存限制: 32 MB
提交: 401  解决: 192
[提交][状态][讨论版][命题人:外部导入]

题目描述

读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。

输入

测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。

输出

对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。

样例输入

30 / 90 - 26 + 97 - 5 - 6 - 13 / 88 * 6 + 51 / 29 + 79 * 87 + 57 * 92
0

样例输出

12178.21


用作对栈和队列的小练习。
啊!九月的考试求不挂!!!
/**********************
author: yomi
date: 18.7.29
ps:
string tmp = "";
tmp+=s.top();//s.top()为char型字符
此写法tmp不会有任何问题
然而,
string tmp=s.top()+"";
则会乱码,注意,考场上千万别紧张出岔子。
**********************/
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
char s[250];
int main()
{
    string a;
    map<char, int>mmap;
    mmap[+] = 0;
    mmap[-] = 0;
    mmap[*] = 1;
    mmap[/] = 1;

    while(getline(cin, a)){
        if(a == "0"){
            break;
        }
        ///去掉a中的全部空格
        for(string::iterator iter=a.begin(); iter!=a.end(); ++iter){
            if(*iter ==  ){
                a.erase(iter);
            }
        }
        ///中缀表达式转后缀表达式
        int len = a.length();
        double ans = 0, tmp=0;
        stack<char>s;
        while(!s.empty()){
            s.pop();
        }
        queue<string>q;
        while(!q.empty()){
            q.pop();
        }
        string t = "";
        for(int i=0; i){
            if(isdigit(a[i])){
                t+=a[i];
            }
            else{
                q.push(t);
                t = "";
                ///compare with the element in stack
                if(s.empty()){
                    s.push(a[i]);
                }
                else if(mmap[a[i]] > mmap[s.top()]){
                    s.push(a[i]);
                }
                else{
                    while(!s.empty()){
                        if(mmap[a[i]] <= mmap[s.top()]){
                            string tmp ="";
                            tmp+= s.top();
                            q.push(tmp);
                            s.pop();
                        }
                        else{
                            break;
                        }
                    }
                    s.push(a[i]);
                }
            }
        }
        q.push(t);
        while(!s.empty()){
            string tmp = "";
            tmp+=s.top();
            q.push(tmp);
            s.pop();
        }
        ///计算后缀表达式的值
        stack<double>s1;
        while(!s1.empty()){
            s1.pop();
        }
//        while(!q.empty()){
//            cout <//            q.pop();
//
//        }
        double n1 = 0.00, n2 = 0.00;
         while(!q.empty()){
            string t = q.front();
            if(t!="+" && t!="-" && t!="*" && t!="/"){
                stringstream is1;
                is1.str(t);
                double n;
                is1 >> n;
                s1.push(n);
            }
            else{

                n1 = s1.top();
                s1.pop();
                n2 = s1.top();
                s1.pop();
                double tmp = 0.00;
                if(t == "+")
                        tmp = n1+n2;
                if(t == "-")
                        tmp = n2-n1;
                if(t == "*")
                        tmp = n1*n2;
                if(t == "/")
                        tmp = n2/n1;
                s1.push(tmp);
            }
            q.pop();
        }
        printf("%.2f\n", s1.top());

    }

    return 0;
}
/**
3+45/3*2   ---->   3 45 3 / 2 * +
36

30 / 90 - 26 + 97 - 5 - 6 - 13 / 88 * 6 + 51 / 29 + 79 * 87 + 57 * 92
0
**/



codeup 1918 简单计算器


推荐阅读
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 本文介绍了一道网络流题目hdu4888 Redraw Beautiful Drawings的解题思路。题目要求以行和列作为结点建图,并通过最大流算法判断是否有解以及是否唯一。文章详细介绍了建图和算法的过程,并强调在dfs过程中要进行回溯。 ... [详细]
  • 本文介绍了SPOJ2829题目的解法及优化方法。题目要求找出满足一定条件的数列,并对结果取模。文章详细解释了解题思路和算法实现,并提出了使用FMT优化的方法。最后,对于第三个限制条件,作者给出了处理方法。文章最后给出了代码实现。 ... [详细]
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 在编写业务代码时,常常会遇到复杂的业务逻辑导致代码冗长混乱的情况。为了解决这个问题,可以利用中间件模式来简化代码逻辑。中间件模式可以帮助我们更好地设计架构和代码,提高代码质量。本文介绍了中间件模式的基本概念和用法。 ... [详细]
  • 第七课主要内容:多进程多线程FIFO,LIFO,优先队列线程局部变量进程与线程的选择线程池异步IO概念及twisted案例股票数据抓取 ... [详细]
author-avatar
落梓-
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有