问题 1844: [蓝桥杯][2017年第八届真题]小计算器

问题 1844: [蓝桥杯][2017年第八届真题]小计算器

时间限制: 1Sec 内存限制: 128MB 提交: 199 解决: 73

题目描述


模拟程序型计算器,依次输入指令,可能包含的指令有


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

参考博客:https://blog.csdn.net/red_red_red/article/details/89812932

#include<iostream>
#include<algorithm>
const int maxn=1e5+5;
typedef long long ll;
using namespace std;
string  Ten_to_R(long long num,int r){//十进制转R进制 
	if( num==0 )
	    return "0";
	string s="";
	while(num){
		int temp=num%r;
		s += to_string( temp );
		num/=r;
	}
	reverse(s.begin(),s.end());
	return s;
} 
long long R_to_Ten(string s,int r){//R进制转十进制 
	long long ans=0,temp=1;
	int  len=s.length();
	for( int i=len-1;i>=0;i--){
		 if( s[i]>='0'&&s[i]<='9' )
		    ans+=(s[i]-'0')*temp;
		 else
		    ans+=(s[i]-'A'+10)*temp;
		 temp*=r;
	}
	return ans;
}
long long cal(long long a,long long b,string s){
	if( s=="ADD")
	    return a+b;
    else if(s=="SUB")
	    return a-b;
	else if(s=="MUL")
	    return a*b;
	else if(s=="DIV")
	    return a/b;
	else
	    return a%b; 
}
 
int main(){
    int t,r=10;
	scanf("%d",&t);		
	long long ans=0;//始终是10进制的 
	string str,tmp;
	while(t--){
        cin>>str;
        if(str=="CLEAR"){//清空 
        	str="*";
        	tmp="*";
		}
		else if(str=="EQUAL"){//转成R进制打印 
			tmp="*";
			cout<<Ten_to_R(ans,r)<<endl;
		}
		else if(str=="CHANGE")//输入R进制 
		    cin>>r;
		else if(str=="NUM"&&tmp=="*"){//被操作的数 
			cin>>str;
			ans=R_to_Ten(str,r);//保证ans 是10进制的 
		}
		else if(str=="NUM"&&tmp!="*"){//操作数   操作不为空 
			cin>>str;
			ans=cal(ans,R_to_Ten(str,r),tmp);
		}
		else
		    tmp=str;//要做的操作 
	} 
    return 0;
}

 

已标记关键词 清除标记
一、课程简介 随着技术的飞速发展,经过多的数据积累,各互联网公司已保存了海量的原始数据和各种业务数据,所以数据仓库技术是各大公司目前都需要着重发展投入的技术领域。数据仓库是面向分析的集成化数据环境,为企业所有决策制定过程,提供系统数据支持的战略集合。通过对数据仓库中数据的分析,可以帮助企业改进业务流程、控制成本、提高产品质量等。 二、课程内容 本次精心打造的数仓项目的课程,从项目架构的搭建,到数据采集模块的设计、数仓架构的设计、实战需求实现、即席查询的实现,我们针对国内目前广泛使用的Apache原生框架和CDH版本框架进行了分别介绍,Apache原生框架介绍中涉及到的技术框架包括Flume、Kafka、Sqoop、MySql、HDFS、Hive、Tez、Spark、Presto、Druid等,CDH版本框架讲解包括CM的安装部署、Hadoop、Zookeeper、Hive、Flume、Kafka、Oozie、Impala、HUE、Kudu、Spark的安装配置,透彻了解不同版本框架的区别联系,将大数据全生态系统前沿技术一网打尽。在过程中对大数据生态体系进行了系统的讲解,对实际企业数仓项目中可能涉及到的技术点都进行了深入的讲解和探讨。同时穿插了大量数仓基础理论知识,让你在掌握实战经验的同时能够打下坚实的理论基础。 三、课程目标 本课程以国内电商巨头实际业务应用场景为依托,对电商数仓的常见实战指标以及难点实战指标进行了详尽讲解,具体指标包括:每日、周、月活跃设备明细,留存用户比例,沉默用户、回流用户、流失用户统计,最近连续3周活跃用户统计,最近7天内连续3天活跃用户统计,GMV成交总额分析,转化率及漏斗分析,品牌复购率分析、订单表拉链表的设计等,让学生拥有更直观全面的实战经验。通过对本课程的学习,对数仓项目可以建立起清晰明确的概念,系统全面的掌握各项数仓项目技术,轻松应对各种数仓难题。 四、课程亮点 本课程结合国内多家企业实际项目经验,特别加入了项目架构模块,从集群规模的确定到框架版本选型以及服务器选型,手把手教你从零开始搭建大数据集群。并且总结大量项目实战中会遇到的问题,针对各个技术框架,均有调优实战经验,具体包括:常用Linux运维命令、Hadoop集群调优、Flume组件选型及性能优化、Kafka集群规模确认及关键参数调优。通过这部分学习,助学生迅速成长,获取前沿技术经验,从容解决实战问题
相关推荐
课程目标 从零开始掌握Premiere影视剪辑的基础知识,学会视频剪辑+影视特效+视频调色+字幕制作 适用人群 PR零基础小白,在校大学生,职场新人,想成为影视剪辑、影视后期、短视频制作、自媒体等高手的朋友。 课程简介 课程以新版PR 2020讲解,可使用PR任意版本学习,绝大多数功能兼容旧版,但强烈建议使用新版本。 【Adobe认证专家讲师精耕细作精品教程,非学院派照本宣科软件操作教程,以任务为导向,面向实际应用场景,每一章都能学会实打实的高手技能,讲解细致,小白也能轻松入门成大神!】 课程好不好,看过就知道,前面的免费章节欢迎试看。 本课程学习不需要任何PR基础,只需要电脑操作基础即可。兼容Windows和Mac操作系统,同时讲解两种系统下的快捷键操作,不用担心操作上的障碍问题。 课程特色 1、以实际PR影视编辑与特效的流程为导向,绝大多数内容都是为了完成某个具体任务,而不是为了讲解某个软件操作而凑数。 2、不同于国内多数教程和书籍,每个知识点务求讲精、讲透,帮助你掌握PR的精髓,而非软件操作上的皮毛,让你真正学到PR的本质,一次学习,终身受用,少走弯路,节约生命。 3、课程会随PR新版本的推出持续更新,不必担心有新功能却不知道怎么用。 4、充足的练习题和作业题,让你在不断的练习和挑战中提升PR技能。
©️2020 CSDN 皮肤主题: 程序猿惹谁了 设计师:白松林 返回首页