#每日一题:小计算器(模拟)
试题 历届试题 小计算器
资源限制
时间限制:1.0s 内存限制:256.0MB
Daily English:
当一个好人受到伤害,所有的好人定将与其同历磨难。
When a good man is hurt,all who would be called good must suffer with him.
问题描述
模拟程序型计算器,依次输入指令,可能包含的指令有
1. 数字:‘NUM X’,X为一个只包含大写字母和数字的字符串,表示一个当前进制的数
2. 运算指令:‘ADD’,‘SUB’,‘MUL’,‘DIV’,‘MOD’,分别表示加减乘,除法取商,除法取余
3. 进制转换指令:‘CHANGE K’,将当前进制转换为K进制(2≤K≤36)
4. 输出指令:‘EQUAL’,以当前进制输出结果
5. 重置指令:‘CLEAR’,清除当前数字
指令按照以下规则给出:
数字,运算指令不会连续给出,进制转换指令,输出指令,重置指令有可能连续给出
运算指令后出现的第一个数字,表示参与运算的数字。且在该运算指令和该数字中间不会出现运算指令和输出指令
重置指令后出现的第一个数字,表示基础值。且在重置指令和第一个数字中间不会出现运算指令和输出指令
进制转换指令可能出现在任何地方
运算过程中中间变量均为非负整数,且小于2^63。
以大写的’A’~'Z’表示10 ~ 35
输入格式
第1行:1个n,表示指令数量
第2…n+1行:每行给出一条指令。指令序列一定以’CLEAR’作为开始,并且满足指令规则
输出格式
依次给出每一次’EQUAL’得到的结果
样例输入
7
CLEAR
NUM 1024
CHANGE 2
ADD
NUM 100000
CHANGE 8
EQUAL
样例输出
2040
思路:
因为数字,运算指令不会连续给出,
所以不用考虑运算符优先级(要计算的直接计算)。
根据题目给的数据范围,
可以将运算的数都用long long来计算,
输出时转换为最近的进制即可!
代码
#include <iostream>
#include <string>
#include <stack>
#include <vector>
#include <algorithm>
typedef long long LL;
using namespace std;//base进制转换为十进制
LL getNum(string num,LL base)
{LL ans = 0;reverse(num.begin(),num.end());int len = num.length();LL now;LL t = 1;for(int i = 0; i < len; i++){if(num[i] >= '0' && num[i]<= '9')now = num[i] - '0';elsenow = num[i] - 'A' + 10;ans += now * t;t *= base;}return ans;
}
//十进制转换为base进制
string change(LL num,LL base)
{string s = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";string res;if(!num) res = "0";//这里要注意!!!while(num){res += s[num%base];num /= base;}reverse(res.begin(),res.end());return res;
}
int main()
{int n;cin>>n;LL base = 10;stack<string>op_st;stack<LL>num_st;char opp[5][5]= {"ADD","SUB","MUL","DIV","MOD"};while(n--){string op,num;cin>>op;if(op == "CLEAR"){if(!num_st.empty())num_st.pop();}else if(op == "NUM"){cin>>num;LL now = getNum(num,base);num_st.push(now);if(!op_st.empty()){LL num1 = num_st.top();num_st.pop();LL num2 = num_st.top();num_st.pop();string ops = op_st.top();op_st.pop();int k = -1;for(int i = 0; i < 5; i++){string now_op(opp[i]);if(ops == now_op){k = i;break;}}switch(k){case 0:num_st.push(num1+num2);break;case 1:num_st.push(num2-num1);break;case 2:num_st.push(num1*num2);break;case 3:num_st.push(num2/num1);break;case 4:num_st.push(num2%num1);break;}}}else if(op == "CHANGE"){cin>>base;}else if(op == "EQUAL"){LL ans = num_st.top();cout<<change(ans,base)<<endl;}else{op_st.push(op);}op.clear();num.clear();}return 0;
}
#每日一题:小计算器(模拟)相关推荐
- JS每日一题: 小程序页面之间如何通信?
20190227 小程序页面之间如何通信? 首先将通信的模型列举出来, 分为以下几种 兄弟页面间通信 父路径页面向子路径页面通信 子路径页面向父路径页面通信 通信的方式 localStorage 本地 ...
- [蓝桥杯][2017年第八届真题]小计算器(模拟)
题目描述 模拟程序型计算器,依次输入指令,可能包含的指令有 数字:'NUM X',X为一个只包含大写字母和数字的字符串,表示一个当前进制的数 运算指令:'ADD','SUB','MUL','DIV', ...
- linux命令dd创建虚拟硬盘,每日一题.PYTHON如何模拟LINUX的dd命令快速创建大文件?...
原文数据: 无 具体要求: 1. 模拟Linux的dd命令快速创建大文件 代码实现: # -*- coding: utf-8 -*- """ # # Authors: l ...
- 每日一题---小凯的疑惑
题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小 凯想知道在无法准确支付的物品中,最贵的 ...
- 每日一题——小凯的疑惑 (买不到的数)
大家好,我是爬行系,今天继续数论题的打卡! 文章目录 前言 题目描述 AC代码 前言 互质的两个数,最大凑不到的数等于a*b-a-b; 不互质的两个数,最大凑不到的数是无上限的 题目描述 传送门 题目 ...
- 每日一题——小b和灯泡(数论)
学习目标: 代码越怪,跑的越快. 我们常规面对一个问题,第一想法在绝大部分都不是最优的.时空间复杂度都很高,需要我们不断地寻找规律去优化.就像我们常说的"有些你写了几十行的代码,人家只用三行 ...
- 每日一题---比赛安排---模拟
题目:比赛安排 思路: 直接模拟选择情况,每天一个队只能参加一场比赛,用变量记录,隔天还原变量: 从小的队开始比,循环开始,满足条件的打比赛: 代码如下: #include<bits/stdc ...
- 每日一题:1894.找到需要补充粉笔的学生编号 简单的模拟题目,注意求余的技巧!...
1894.找到需要补充粉笔的学生编号 https://leetcode-cn.com/problems/find-the-student-that-will-replace-the-chalk/ 难度 ...
- Leetcode 每日一题双题版(2.25+2.24)模拟练细节
Leetcode 每日一题双题版(2.25+2.24)模拟练细节 前言 刚刚敲了今天刷新的题目,然后昨天的也写了,就想着更新一下blog 两道题都是模拟题,对于模拟,我的看法就是看懂题目,拿捏细节,难 ...
最新文章
- 史上最强《Java 开发手册》泰山版王者归来
- uva 11992 - Fast Matrix Operations
- 【简便解法】1035 插入与归并 (25分)_37行代码AC
- java super是什么意思_java中Super到底是什么意思?必须举例说明!
- 【问链财经-区块链基础知识系列】 第十六课 区块链将变革教育产业,未来有六大应用方向
- java中parser_JavaParser:Java代码生成
- 【软件工程】山东大学软件工程复习提纲
- 培训落差感,一切以不传授技能为主的培训都是耍流氓
- 华为大数据研发第1轮面试
- vb.net 简单取摄像头图片_【图片】大车监控如何安装?_大车监控吧
- Ubuntu的安装、更新、下载软件命令
- Node.js Sinon测试替身
- Lync 2013十大新功能
- 超越大典汽车维修系统
- 结合推荐营销和社交媒体的最佳实践有哪些?
- 基于Mozilla平台的扩展开发(续)----XPCOM组件篇
- 想实现多人协作的“在线Excel”?真没那么简单
- Yilia使用搜狐畅言配置
- 【欧拉计划第 13 题】 大数之和 Large sum
- Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or us
热门文章
- java set第n位_Java学习路线:float在内存中的存储
- java comet demo,[转]comet4j的简单应用
- linux cfs,朴素的UNIX之-Linux CFS一个注释
- dubbo源码深度解析_Spring源码深度解析:手把手教你搭建Spring开发环境
- elasticsearch 根据条件更新数据
- PyTorch教程(九):损失函数与Loss的梯度
- SpringMVC使用AOP
- Python函数合集:足足68个内置函数请收好!
- android工程创建,3.2.1 创建Android 项目(2)
- 辽宁省普通话水平测试软件,辽宁普通话水平测试报名入口