codeup 1918: 简单计算器

【机试练习】【C++】【codeup 1918】简单计算器 编写机试C++代码时,要注意封装的粒度。何种粒度的操作应该封装入函数中,何种粒度应该暴露在外面形成流畅的逻辑。本文非常注意这一点,在main函数中的操作都是重复和类似的,而将更加细粒度的操作封装入函数中。 #include<cstdio> #include<iostream> #include<string> #include<stack& 阅读详情

题目:http://codeup.cn/problem.php?id=1918

题目描述

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

输入

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

输出

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

样例输入

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

样例输出

12178.21

 1、getline(cin, str) 可读入空格,以换行为结束标志。

2、栈与队列的应用。

3、中缀表达式转后缀表达式,后缀表达式的计算。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<stack>
#include<queue>
#include<map> 
using namespace std;

struct node
{
	double num;
	char op;
	bool flag; //true: 操作数  false: 操作符 
};

string str;
stack<node> symbol; //操作符栈 
queue<node> postfix;  //后缀表达式序列
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++;
			} 
			postfix.push(temp);
		}
		else
		{
			temp.flag=false;
			while(!symbol.empty()&&op[str[i]]<=op[symbol.top().op])
			{
				postfix.push(symbol.top());
				symbol.pop();
			}
			temp.op=str[i];
			symbol.push(temp);
			i++;
		}		
	}	 
	
	//操作符栈中还有操作符
	while(!symbol.empty())
	{
		postfix.push(symbol.top());
		symbol.pop();
	} 
} 
 
double cal()
{
	double temp1,temp2;
	node cur,temp;
	while(!postfix.empty())
	{
		cur=postfix.front();
		postfix.pop();
		
		if(cur.flag==true) symbol.push(cur);  //符号栈重用,【注】存操作数。 
		else
		{
			temp2=symbol.top().num;
			symbol.pop();
			temp1=symbol.top().num;
			symbol.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;
			
			symbol.push(temp); 
		}		
	}
	return symbol.top().num;
}

int main()
{
	//利用map设置优先级  
	op['+']=op['-']=1;
	op['*']=op['/']=2;
	while(getline(cin,str),str!="0") //cin>>str
	{
		//去掉空格 
		for(string::iterator it=str.begin();it!=str.end();it++)
		{
			if(*it==' ') str.erase(it);
		}
		//清空符号栈 
		while(!symbol.empty()) symbol.pop();
		
		change();
		printf("%.2f\n",cal());
	} 
	return 0;
} 

 

【算法笔记】栈/队列 的应用-(codeup 1918)简单计算器 栈/队列 的应用-(codeup 1918)简单计算器栈栈的常见操作队列队列常见操作【codeup 1918】 简单计算器 栈 栈:后进先出的数据结构。 栈顶指针:始终指向栈的最上方元素的一个标记。使用数组实现栈时,栈顶指针是一个int型变量(数组下标从零开始),记top;使用链表实现栈时,是一个int* 型指针。 栈中没有元素,栈空时令top为-1。 栈的常见操作 清空 clear() 栈顶指针置为-1 void clear(){ TOP=-1; } 获取栈内元素个数 size() top指针始 阅读详情

相关推荐

Python实战:ERA5风场数据区域提取与风向合成可视化全流程解析

本文详细解析了使用Python处理ERA5风场数据的完整流程,包括NC文件读取、特定区域数据提取、u/v分量合成风向风速的计算,以及利用Matplotlib进行风场时空演变可视化。内容涵盖从环境搭建、数据获取到高级绘图与性能优化的实战经验,为气象数据分析、风能评估及气候研究提供了一套清晰、可操作的技术指南。

swift5iosmith的博客 304

codeup 1918 简单计算器

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

weixin_44620697的博客 280

宿舍网速跑不满?可能是PPPoE的锅!实测OpenWrt切换DHCP+深澜认证,轻松跑满校园百兆宽带

本文探讨了校园网PPPoE协议的性能瓶颈问题,并提供了通过OpenWrt路由器切换DHCP+深澜认证的技术方案,实测可显著提升网速至百兆宽带满速。文章详细介绍了配置步骤、性能对比及常见问题解决方案,帮助用户优化校园网体验。

weixin_31310913的博客 384

codeup 1918 简单计算器(升级版 包含括号)

题目描述 读入一个只包含 +, -, *, / ,(,)的非负整数计算表达式,计算该表达式的值。 输入 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。 输出 对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。 样例输入 30 / 90 - 26 + 97 - 5 - 6 - 13 / 88 * 6 + 51 / 29 + 79 * 87 + 57 * 92 0 样

weixin_43694297的博客 205

【开关电源篇】整流及其滤波电路的工作原理和设计指南-超简单解读

半波整流是一种利用二极管的单向导通特性,将交流电转换为直流电的基础电路。它通过“切除”交流电的半个周期,仅保留另外半个周期来实现整流。1 开关电源超快学习思路点击跳转1.1开关电源的原理、结构和实物入门篇-超简单解读点击跳转1.2开关电源的EMI输入电路-超简单解读点击跳转倍压整流适用于需要高电压、小电流的特殊场合,通过电容充放电实现电压倍增。

2301_81299416的博客 2928

GD32重映射实战:从部分映射到完全映射的配置解析

本文深入解析GD32微控制器的重映射功能,以定时器1的PWM通道为例,详细阐述了从部分映射到完全映射的实战配置流程。文章重点介绍了AFIO模块的核心作用、配置寄存器操作以及关键的避坑指南,旨在帮助开发者灵活优化PCB布局并解决引脚资源冲突,从而高效利用芯片外设功能。

k6l7m8n9的博客 695

codeup1918简单计算器

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

weixin_43370733的博客 231

Ubuntu docker镜像中下载安装 DPABI(DPARSF)

在Ubuntu服务器的docker镜像中用MATLAB运行DPABI(以及使用DPARSF的功能)。

Pandako's Blog 1723

Codeup 1918: 简单计算器

一、题目大意 Codeup 1018 二、解题思路 简单的栈应用。 一种思路是先将中缀表达式转换为后缀表达式,然后再处理后缀表达式。 这里采用了直接计算的思路。设置一个操作数栈和一个操作符栈,读入当前数据,如果为操作数则压入数栈;为操作符则要与符栈顶的操作符比较优先级,如果优先级高则压入符栈;否则符栈弹出一个操作符,数栈弹出两个操作数进行计算,结果入栈,直到当前符栈顶的操作符的优先级低于要...

Armstrong的博客 685

python实现马丁策略(股市) (附完整源码)

python实现马丁策略(股市) (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 605

基于Python的海关进出口数据爬取与贸易关系分析

本文介绍了如何使用Python爬虫技术获取海关进出口数据,并基于这些数据进行贸易关系分析。文章详细阐述了数据采集、清洗、存储和分析的全过程,使用了最新的爬虫技术和数据分析方法,为国际贸易研究提供数据支持和技术参考。关键词:Python爬虫、海关数据、贸易分析、数据可视化、Selenium、Scrapy。

2201_76125261的博客 544

CodeUp1918: 简单计算器

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

CrazyTony的博客 384

TC3XX - MCAL知识点(三十三):基于EB Tresos配置Tc3xx的MCAL代码如何产生中心对称的三相六路发波波形

本文用于记录如何在英飞凌 tc3xx 芯片的应用开发中,借助 EB Tresos 配置工具生成的配置代码与 MCAL 源码相结合,进而实现三相六路中心对称互补的 PWM 输出效果。外部资源需求:EB Tresos23.0以上、Tasking\Hightec编译器、示波器\逻辑分析仪。

梦想技术家 1216

Codeup:1918: 简单计算器

1918:简单计算器 题目大意 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。 注意 1、很经典的栈操作,主要是getNext()得到下一个运算符/运算数的函数难写。要考虑字符串开头或结尾。这次是标记了一个结束标志,比较方便。 2、判断是否结束运算的条件要注意。 #include<stdio.h> #include<stack> #inclu...

weixin_40541877的博客 240

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

codeup1918问题 A: 简单计算器

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

Chuyuan_li的博客 383

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【codeup墓地】1918: 简单计算器(栈、string、逗号表达式)

原题链接 #include &lt;algorithm&gt; #include &lt;iostream&gt; #include &lt;cstdio&gt; #include &lt;cstring&gt; #include &lt;string&gt; #include &lt;ctime&gt; #include &lt;cmath&gt; #include &lt;vector

izhxxx的博客 311

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

算法笔记codeup 1918 简易计算器详解(用c++栈实现计算器)

codeup 1918 简易计算器 题目描述 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。 输入 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。 输出 对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。 样例输入: 30 / 90 - 26 + 97 - 5 - 6 - 13 / 88 * 6 + 51 / 29 + 79 * 87 + 57 *

J_aSON_的博客 757

codeup1918 简单计算器

题目描述 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。 输入 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。 输出 对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。 样例输入 30 / 90 - 26 + 97 - 5 - 6 - 13 / 88 * 6 + 51 / 29 + 79 * 87 + 57 * 92 0 样例输出.

myBarbara的博客 443

codeup 1918 计算器

题目地址:简单计算器 题目思路:给出中缀表达式,转化成后缀表达式(计算之类东西常用用的套路),计算后缀表达式 解析代码已经有很多了,我就不再贴上来了,记录一下踩到的坑,希望以后不会再犯了。 ...

Doreen12138的博客 312

codeup 1918 简易计算器

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

yuxiaoyan1998的博客 276
上一篇: algorithm下的全排列函数next_permutation
下一篇: 单链表的基本操作
Estrellas_
博客等级 码龄9年 273粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值