zoukankan      html  css  js  c++  java
  • 蓝桥杯 历届试题 小计算器

     历届试题 小计算器  

    时间限制:1.0s   内存限制:256.0MB

        

    问题描述

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


      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

    题解:将每次输入的数字转为十进制操作和保存,输出前转为当前进制输出

    #include<iostream>
    #include<string.h>
    #include<math.h>
    #include<algorithm>
    #define ll long long
    using namespace std;
    ll num=0;
    ll r=10;//初始为十进制
    ll get10()//输入数字并得到对应十进制的值
    {
            ll m=0,p=1;
            string s;
            cin>>s;
            for(int i=s.length()-1;i>=0;i--){
                    if(s[i]>'9')
                            m+=p*(s[i]-'A'+10);
                    else m+=p*(s[i]-'0');
                    p*=r;//r的次方
            }
            return m;
    }
    void print()
    {
            string s;
            ll nn=num;
            if(nn==0)
                    s="0";
            while(nn){
                    char c;
                    if(nn%r<=9)
                            c=(nn%r)+'0';
                    else
                            c=(nn%r-10)+'A';
                    nn/=r;
                    s=c+s;
            }
            cout<<s<<endl;
    }
    int main()
    {
            int n,ope=1;
            string ss;
            scanf("%d",&n);
            while(n--)
            {
                    cin>>ss;
                    if(ss=="CLEAR")
                            num=ope=0;
                    else if(ss=="ADD")
                            ope=1;
                    else if(ss=="SUB")
                            ope=2;
                    else if(ss=="MUL")
                            ope=3;
                    else if(ss=="DIV")
                            ope=4;
                    else if(ss=="MOD")
                            ope=5;
                    else if(ss=="CHANGE")
                            scanf("%lld",&r);
                    else if(ss=="NUM"){
                            switch(ope){
                                    case 0:num=get10();break;//清零后的操作
                                    case 1:num+=get10();break;
                                    case 2:num-=get10();break;
                                    case 3:num*=get10();break;
                                    case 4:num/=get10();break;
                                    case 5:num%=get10();break;
                            }
                    }
                    else if(ss=="EQUAL")
                            print();//转为r进制输出
            }
            return 0;
    }
  • 相关阅读:
    Git撤销某次分支的合并Merge
    Git撤销commit到未提交状态
    团队项目的Git分支管理规范
    命令行高效操作Git
    WebGoat安装说明
    您备案的网站未指向阿里云国内节点(不含香港)服务器,备案号可能被取消接入
    Java加密、解密--AES_Base64
    github 搜索技巧
    docker简介及安装常用开发软件
    springboot整合kafka实现消息推送
  • 原文地址:https://www.cnblogs.com/aeipyuan/p/10079525.html
Copyright © 2011-2022 走看看