试题 历届试题 小计算器

资源限制
时间限制: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;
}

#每日一题:小计算器(模拟)相关推荐

  1. JS每日一题: 小程序页面之间如何通信?

    20190227 小程序页面之间如何通信? 首先将通信的模型列举出来, 分为以下几种 兄弟页面间通信 父路径页面向子路径页面通信 子路径页面向父路径页面通信 通信的方式 localStorage 本地 ...

  2. [蓝桥杯][2017年第八届真题]小计算器(模拟)

    题目描述 模拟程序型计算器,依次输入指令,可能包含的指令有 数字:'NUM X',X为一个只包含大写字母和数字的字符串,表示一个当前进制的数 运算指令:'ADD','SUB','MUL','DIV', ...

  3. linux命令dd创建虚拟硬盘,每日一题.PYTHON如何模拟LINUX的dd命令快速创建大文件?...

    原文数据: 无 具体要求: 1. 模拟Linux的dd命令快速创建大文件 代码实现: # -*- coding: utf-8 -*- """ # # Authors: l ...

  4. 每日一题---小凯的疑惑

    题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小 凯想知道在无法准确支付的物品中,最贵的 ...

  5. 每日一题——小凯的疑惑 (买不到的数)

    大家好,我是爬行系,今天继续数论题的打卡! 文章目录 前言 题目描述 AC代码 前言 互质的两个数,最大凑不到的数等于a*b-a-b; 不互质的两个数,最大凑不到的数是无上限的 题目描述 传送门 题目 ...

  6. 每日一题——小b和灯泡(数论)

    学习目标: 代码越怪,跑的越快. 我们常规面对一个问题,第一想法在绝大部分都不是最优的.时空间复杂度都很高,需要我们不断地寻找规律去优化.就像我们常说的"有些你写了几十行的代码,人家只用三行 ...

  7. 每日一题---比赛安排---模拟

    题目:比赛安排 思路: 直接模拟选择情况,每天一个队只能参加一场比赛,用变量记录,隔天还原变量:  从小的队开始比,循环开始,满足条件的打比赛: 代码如下: #include<bits/stdc ...

  8. 每日一题:1894.找到需要补充粉笔的学生编号 简单的模拟题目,注意求余的技巧!...

    1894.找到需要补充粉笔的学生编号 https://leetcode-cn.com/problems/find-the-student-that-will-replace-the-chalk/ 难度 ...

  9. Leetcode 每日一题双题版(2.25+2.24)模拟练细节

    Leetcode 每日一题双题版(2.25+2.24)模拟练细节 前言 刚刚敲了今天刷新的题目,然后昨天的也写了,就想着更新一下blog 两道题都是模拟题,对于模拟,我的看法就是看懂题目,拿捏细节,难 ...

最新文章

  1. 史上最强《Java 开发手册》泰山版王者归来
  2. uva 11992 - Fast Matrix Operations
  3. 【简便解法】1035 插入与归并 (25分)_37行代码AC
  4. java super是什么意思_java中Super到底是什么意思?必须举例说明!
  5. 【问链财经-区块链基础知识系列】 第十六课 区块链将变革教育产业,未来有六大应用方向
  6. java中parser_JavaParser:Java代码生成
  7. 【软件工程】山东大学软件工程复习提纲
  8. 培训落差感,一切以不传授技能为主的培训都是耍流氓
  9. 华为大数据研发第1轮面试
  10. vb.net 简单取摄像头图片_【图片】大车监控如何安装?_大车监控吧
  11. Ubuntu的安装、更新、下载软件命令
  12. Node.js Sinon测试替身
  13. Lync 2013十大新功能
  14. 超越大典汽车维修系统
  15. 结合推荐营销和社交媒体的最佳实践有哪些?
  16. 基于Mozilla平台的扩展开发(续)----XPCOM组件篇
  17. 想实现多人协作的“在线Excel”?真没那么简单
  18. Yilia使用搜狐畅言配置
  19. 【欧拉计划第 13 题】 大数之和 Large sum
  20. Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or us

热门文章

  1. java set第n位_Java学习路线:float在内存中的存储
  2. java comet demo,[转]comet4j的简单应用
  3. linux cfs,朴素的UNIX之-Linux CFS一个注释
  4. dubbo源码深度解析_Spring源码深度解析:手把手教你搭建Spring开发环境
  5. elasticsearch 根据条件更新数据
  6. PyTorch教程(九):损失函数与Loss的梯度
  7. SpringMVC使用AOP
  8. Python函数合集:足足68个内置函数请收好!
  9. android工程创建,3.2.1 创建Android 项目(2)
  10. 辽宁省普通话水平测试软件,辽宁普通话水平测试报名入口