hdu -1237- 简单计算器(栈实现)

hdu1237(简单计算器) LinkedList类实现栈和队列功能 LinkedList类的强大,既能看做队列,也能看做栈,很好的体现了队列,栈和集合的关系和区别的例题 阅读详情

题目链接:acm.hdu.edu.cn/showproblem.php?pid=1237


简单计算器

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 9055    Accepted Submission(s): 2932


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

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

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

Sample Input
      
1 + 2 4 + 2 * 5 - 7 / 11 0
 

Sample Output
      
3.00 13.36

解析:

字符串方式入栈,站定表示字符串尾,因此计算表达式时是从右向左计算的。

表达式的性质是从左向右,乘除优先,而加减左右无所谓了,因此需要单独处理乘除。

数据方面应注意:

0 + 0输出0.00而不是结束程序

1 / 2 / 2输出0.25

1 / 8 * 6输出0.75


参考代码:(该代码可优化----代码在main()中处理 加减时缀余,可在mul()中优化)

#include<stdio.h>
#include<string.h>
#include<stack>
using namespace std;
char str[210];
stack <char> s;
double num=0;

double mul()
{
    double p = s.top()-'0';
    s.pop();
    int t = 1;
    while(!(s.empty() || s.top()==' '))
    {
        t *= 10;
        p += (s.top()-'0')*t;
        s.pop();           
    } 
    if(!s.empty())   
        s.pop();
    if(s.empty() || s.top()=='+' || s.top()=='-')
        return p; 
    if(s.top() == '/')
    {
        s.pop();s.pop();
        return (double)mul()/p;           
    }
    else if(s.top() == '*')
    {
        s.pop();s.pop();
        return (double)mul()*p;           
    }        
}
int main()
{
    while(gets(str), strcmp(str, "0")!=0)
    {
       int len = strlen(str);
       for(int i=0; i<len; i++)
       {
           s.push(str[i]);        
       } 
       double p = s.top()-'0';
       s.pop();
       int t = 1;
       while(!(s.empty() || s.top()==' '))
       {
           t *= 10;
           p += (s.top()-'0')*t;
           s.pop();           
       } 
       if(!s.empty())   
           s.pop();
       int tmp;          
       while(!s.empty())
       {
            if(s.top() == '/')
            {
                s.pop();
                s.pop();
                p = mul()/p;
            }           
            else if(s.top() == '-')
            {
                s.pop();
                s.pop();
                tmp = s.top() - '0';
                s.pop();
                t = 1;
                while(!(s.empty() || s.top()==' ') )
                {
                    t *= 10;
                    tmp += (s.top()-'0')*t;
                    s.pop();           
                }    
                if(!s.empty())   
                    s.pop();
                num -= p;
                p = tmp; 
            }     
            else if(s.top() == '*')
            {
                s.pop();s.pop();
                p *= mul();
            }
            else if(s.top() == '+')
            {
                s.pop();s.pop();
                num += p;
                tmp = s.top() - '0';
                s.pop();
                t = 1;
                while(!(s.empty() || s.top()==' ') )
                {
                    t *= 10;
                    tmp += (s.top()-'0')*t;
                    s.pop();           
                }    
                if(!s.empty())   
                    s.pop();
                p = tmp;
            }
       }
       num += p;
       printf("%.2lf\n", num);
       num = 0;
    }
    return 0;    
}






HDU - 1237 - 简单计算器(栈) HDU 1237.简单计算器 Time Limit: 2000/1000 MS (Java/Others)      Memory Limit: 65536/32768 K (Java/Others) Problem Description 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。Input测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个 阅读详情

相关推荐

ACL访问控制列表详解:原理、配置与应用

如果发现ACL规则没有达到预期效果,需要检查ACL规则配置是否正确,是否在正确的接口和方向上应用,以及规则顺序是否合理(ACL规则按顺序匹配,匹配到即停止)。其中,rule-id是规则的编号,用于确定规则的匹配顺序;例如,应该先配置针对特定主机和特定端口的规则,再配置针对整个网段的规则,最后配置允许所有流量的规则,这样才能确保ACL按照预期工作,避免因规则顺序不当导致的访问控制失效。例如,应该先配置针对特定主机的规则,再配置针对整个网段的规则,最后配置允许所有流量的规则,这样才能确保ACL按照预期工作。

彭大帅的博客 1048

hdu1237简单计算器-栈实现

简单计算器 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 19135 Accepted Submission(s): 6730Problem Description 读入一个只包含 +, -, *, / 的非负整数计算表达式,

wo的只属于我 431

NR RRC协议(2)---RRC连接建立流程

RRC连接建立目的是建立SRB1 RRC连接建立还用于将初始NAS消息从UE传送到网络 RRC连接的初始阶段期间,不激活AS安全性 RRC连接建立由UE侧发起

crg2046的博客 1957

hdu 1237简单计算器 栈的运用

hdu 1237 简单计算器 题目描述 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。 Input 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。 Output 对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。 Sample Input 1 + 2 4 + 2 * 5 - 7 / 11 0 Sample Output 3.00 13.36

weixin_46171975的博客 205

Unity游戏开发实战:如何用科大讯飞离线语音合成SDK实现NPC对话(附完整代码)

本文详细介绍了如何在Unity游戏开发中使用科大讯飞离线语音合成SDK实现NPC对话系统。通过完整的代码示例和优化技巧,开发者可以快速集成本地语音合成功能,提升游戏沉浸感,同时避免网络延迟问题。文章涵盖SDK集成、核心语音合成模块实现以及高级应用技巧,特别适合RPG游戏开发者参考。

weixin_29268385的博客 182

逍遥模拟器改真机参数全指南:从ARM伪装到电池传感器模拟

本文提供逍遥模拟器深度伪装实战指南,重点讲解如何通过修改ARM架构、系统属性和模拟传感器数据,使其在硬件信息、电池状态等维度逼近真实设备,有效规避应用检测。文章详细介绍了使用Magisk模块、LSPosed框架进行设备指纹伪装和动态数据模拟的策略,帮助用户实现从静态信息到动态行为的全方位真机模拟。

weixin_29279101的博客 452

HDU——1237简单计算器

HDU——1237简单计算器 分析:模拟题,现将一行的字符读入,当遇见数字就放入数子栈,遇见加减放入字符栈, 遇见乘除,将最顶端的数字串和下一个数字进行计算再放入数字栈 _最后将栈里面的元素倒置,进行加减运算,emmm估计队列也可以用的 用stack和对字符串的处理 给的数据也好,每个数字和字符中间都是用空格分开,好判断emmm~ #include<iostream> #include<cs

DeathYmz的博客 786

FPGA实现电机转速PID控制

通过纯RTL实现电机转速PID控制,包括电机编码器值读取,电机速度、正反转控制,PID算法,卡尔曼滤波,最终实现对电机速度进行控制,使其能够渐近设定的编码器目标值。

STATEABC的博客 7499

HDU 1237 简单计算器 栈

HDU 1237 简单计算器 栈 额,题目是中文的,题意就不用说了= =都看懂喽。写个字符串先把这行计算式存进去,不过不能存一个算一个,因为考虑到乘除法比加减法优先的原则,如果是加号减号就先存着等待计算,如果是乘号除号就直接算出来值就好了。然后,就想到了栈的思想了,写两个栈一个存符号一个存数字,如果是加减号留在栈里,如果是乘除号就直接运...

weixin_30558305的博客 133

CANoe实战:LIN Slave一致性测试全流程解析

本文详细解析了使用CANoe进行LIN Slave一致性测试的全流程,包括测试概述、环境搭建、模块集成、测试用例详解及报告分析。通过实际案例分享,帮助工程师掌握LIN 2.0/2.1/2.2、SAE J2602和ISO 17987等标准的自动化测试方法,提升汽车电子从节点的可靠性和兼容性验证效率。

weixin_42665725的博客 533

避坑指南:RFSoC数据转换器多片同步配置的7个致命错误

本文深入剖析了在配置RFSoC多片同步功能时,工程师最常遇到的七个致命错误。从Tile 0的强制启用、时钟域与SYSREF时序,到跨代器件兼容性、电源序列以及动态重配置的陷阱,文章结合实战经验,提供了从原理到调试的完整RF数据转换器配置指南,旨在帮助开发者高效构建相位一致的大规模射频采样系统。

weixin_28452161的博客 533

HDU-1237-题解-STL、栈

HDU 1237 题解 简单计算器 题目大意 计算器,非负整数 加减乘除 Time: 1000 ms Memory: 32768 kB 解题思路及分析 由于乘除的优先级比加法高,所以在计算的时候要先算乘除 没有括号,乘除算的只是与相邻数字运算的结果 用栈来维护,只算加法,减法则把相反数入栈 乘除即取出栈顶,计算过后再入栈 输入有些复杂,注意结束输入的条件否则容易WA AC代码 #include <bits/stdc++.h> using namespace std; int m.

CapriceH的博客 313

YOLOv11改进 | 引入DEConv细节增强卷积模块:恢复细节信息,提升小目标检测精度

摘要: YOLOv11在目标检测中面临小目标检测精度不足的问题,主要由于细节信息丢失。本文提出引入DEConv(细节增强卷积)模块,通过多分支卷积和残差连接恢复高频细节,提升小目标检测性能。DEConv结合3×3卷积与空洞卷积增强边缘信息,并自适应融合特征,兼容YOLOv11的P3层(小目标关键层)且计算高效。实验表明,该改进在无人机航拍、显微镜图像等密集小目标场景中显著减少漏检,同时保持轻量化和实时性优势。代码实现可直接嵌入现有YOLO架构,仅需替换P3层卷积模块。

走向CTO的路上... 950

HDU 1237 简单计算器

HDU 1237 简单计算器 /*Problem Description读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。 Input测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。 Out...

weixin_30852419的博客 85

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

HDU1237 简单计算器【堆栈】

简单计算器 Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 21518Accepted Submission(s): 7722 Problem Description 读入一个只包含 +, -,...

weixin_34067980的博客 92

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

STL----栈的初步应用

STL----栈的初步应用(学习笔记) 栈的模型如下 栈就像一个装满衣服的桶,要想往里面放衣服,只能放在最上面;而要想取出衣服,则必须先从上面去取。简称为上进上出。 应用实例 1. HDU 5479 ---- Scaena Felix Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Description Given a parentheses sequence cons

Prince的博客 259

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

android栈计算器,简单计算器--hdu1237(栈的运用)

这是单纯的本题答案;#include#define N 1100int main(){int a,j,i;double Sum[N],sum;char c1,c2,c;while(scanf("%d",&a)!=EOF){sum=;Sum[]=a;c=getchar();j=;if(a==&&c!=' ')break;while(scanf("%c %d%c",&c...

weixin_29161785的博客 311

简单计算器HDU-1237(堆和栈的问题)

做题链接 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。 Input 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。 Output 对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。 Sample Input 1 + 2 4 + 2 * 5...

weixin_44237551的博客 331

HDU1237简单计算器(栈的应用)

#include <iostream> #include <algorithm> #include <cstdio> #include <stack> #include <cstring> #include <sstream> #include <cstdlib> using namespace std; ...

FlyingJack 297

hdu 1237 简单计算器

简单计算器

1783

HDU-1237 简单计算器(用栈与不用栈)

HDU-1237 简单计算器(用栈与不用栈) 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。 Input 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。 Output 对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。 Sample Inp...

超逸の学习技术博客 1401

HDU 1237 简单计算器 逆波兰表达式

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1237题意:Problem Description 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。Input 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。

弱智就要多努力 1109

hdu 1237 简单计算器(栈)

hdu 1237 简单计算器(栈) 如果是+,就把原数压入栈 如果是-,就把相反数压入栈 如果是*,就把当前数和栈顶数计算后压入栈 如果是/,就把当前数和栈顶数计算后压入栈 注意该题是3 + 2而不是3+2,有空格 #include &lt;iostream&gt; #include&lt;cstring&gt; #include&lt;algorithm&gt; #include&lt;stri...

candiceyj的博客 243

hdu 1237 简单计算器(数组模拟栈,队列)

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1237 简单计算器 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 15248    Accepted Submission(s): 5

theArcticOcean 824

简单计算器 HDU - 1237 (栈问题)

简单计算器 HDU - 1237 目录 简单计算器 题意描述 解题思路 易错分析 完成AC 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。 Input 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。 Output 对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。 Sample Input 1 + 2 4 + 2 .

m0_58245389的博客 1963

HDU-1237-简单计算器

HDU-1237-简单计算器 传送门 这道题是一道栈的运用 中文题目,我就不描述啦~ 按照计算法则,是先乘除,后加减。(但实际上计算器是实时计算的) 因为是合法的表达式,运算符和操作数之间只有一个空格。所以碰到一个运算符的话那么前后就是操作数。碰到加号将下一个数入栈,碰到减号将下一个数变成他的相反数入栈,碰到乘号和除号就弹出一个数与操作符的下一个数进行运算即可。 因为我是getline读入,所以注意一个非负整数不止一位。 代码部分: #include <bits/stdc++.h> using

qq_44624316的博客 360
上一篇: 电脑小技巧
下一篇: codeforces-230A-Dragons(贪心+排序)
monkey7777
博客等级 码龄15年 55粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值