首页 > 其他 > 详细

蓝桥杯试题(真题)训练

时间:2020-02-04 17:08:28      阅读:75      评论:0      收藏:0      [点我收藏+]

题解:https://blog.csdn.net/qq_42835910/article/details/88959695

1. 小计算器 -----运算符     难度:5颗星

c语言的compare函数比较两字符串大小

1 //使用c语言的compare函数比较两字符串大小 返回值为-1,0,1 
2 string s1 = "asd",s2 = "asd";
3 int t = s1.compare(s2);//逐个比较字母,若t=-1,说明 s1<s2 ; 若t=1,说明 s1>s2 ; 若t=0,说明 s1=s2 ; 
4 cout<<t<<endl;

思路:

使用两个函数:toNumber(string s,int c)、toString(long long n,int c)

对于toNumber(string s,int c)函数作用:将c进制的s2字符串转为10进制的数字

对于toString(long long n,int c)函数作用:将10进制的n数字转为c进制的字符串

对于该题,我们运算中的数字都转为10进制去运算,所以我们的数字平时都以10进制保存(输入s2之后,使用toNumber(s2,c)转为10进制)

当我们需要输出答案时,再将运算结果用c进制输出(toString(res,c))

代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;

//将c进制的s2字符串转为10进制的数字
long long toNumber(string s,int c){ //c表示进制数 
    long long n = 0;
    int len = s.length();
    for(int i = 0;i < len;i++){
        if(isupper(s[i])) n = (s[i]-A+10)+n*c;
        else n = (s[i]-0)+n*c; 
    }
    return n;
}

//将10进制的n数字转为c进制的字符串
string toString(long long n,int c){
    if(n == 0) return "0";
    long long m;
    string s;
    while(n){
        m = n % c;
        if(m >= 10) s.push_back(m+A-10);
        else s.push_back(m+0);
        n /= c;
    }
    reverse(s.begin(), s.end());
    return s;
} 

int main(){
    //n表示操作数,c表示当前进制单位,isclear标记前面的数是否被清除 
    //p表示操作符序号 
    int n,c = 10,p = 0,isclear = 1;
    cin >> n;
    //s1表示操作,s2表示数字 
     string s1,s2;
    long long res = 0,num;
    while(n--){
        cin>>s1;
        if(s1.compare("NUM")==0){
            cin>>s2;
            if(isclear){ //说明前面的数已经被清除 
                res = toNumber(s2,c);//说明s2为c进制的数,将s2转为10进制的数字 
                isclear = 0;
            } 
            else{
                num = toNumber(s2,c);
            }
            if(p){
                if(p == 1) res += num;
                else  if(p == 2) res -= num;
                else  if(p == 3) res *= num;
                else  if(p == 4) res /= num;
                else  if(p == 5) res %= num;
                p=0;
            }
        } 
        else if(s1.compare("CHANGE")==0){
            cin>>c;
        }
        else if(s1.compare("EQUAL")==0){//平时计算都以10进制 
            cout<<toString(res,c)<<endl;//将res化为c进制 
        }
        else if(s1.compare("CLEAR")==0){
            isclear = 1;//表示将前面的数清除 
        }
        else if(s1.compare("ADD")==0){
            p=1; 
        }
        else if(s1.compare("SUB")==0){
            p=2;
        }
        else if(s1.compare("MUL")==0){
            p=3;
        }
        else if(s1.compare("DIV")==0){
            p=4;
        }
        else if(s1.compare("MOD")==0){
            p=5;
        }
    } 
    return 0;
} 

 

蓝桥杯试题(真题)训练

原文:https://www.cnblogs.com/Aiahtwo/p/12260047.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!