蓝桥历届试题

小计算器

上一轮运算的结果,是下一轮运算的第一个算子。进制也是。

#include<iostream>
#include<algorithm>
#include<string>
const long long MAX=2E5+7;
using namespace std;
long long n,j,res,flag,a[2];
string t;
long long change(string t,long long k)
{
    long long e=t.size();
    long long ts=0;
    for(long long i=0;i<e;++i)
    {
        if('A'<=t[i]&&t[i]<='Z') ts=ts*k+t[i]-'A'+10;
        else ts=ts*k+t[i]-'0';
    }
    return ts;
}
string rchange(long long res,long long k)
{
    if(res==0) return "0";
    string s;
    long long r;
    while(res)
    {
        r=res%k;
        if(r>=10) s.push_back(r+'A'-10);
        else s.push_back(r+'0');
        res/=k;
    }
    reverse(s.begin(),s.end());
    return s;
}
int main()
{
    cin>>n;
    long long k=10;
    while(n--)
    {
        cin>>t;
        if(t=="NUM")
        {
            cin>>t;
            if(j) { a[0]=change(t,k);j=0; }
            else a[1]=change(t,k);
            if(flag)
            {
                switch(flag)
                {
                     case 1:a[0] = a[0]+a[1];break;
                     case 2:a[0] = a[0]-a[1];break;
                     case 3:a[0] = a[0]*a[1];break;
                     case 4:a[0] = a[0]/a[1];break;
                     case 5:a[0] = a[0]%a[1];break;
                }
                flag=0;
            }

        }
        else if(t=="CHANGE") cin>>k;
        else if(t=="ADD") { flag=1; }
        else if(t=="SUB") { flag=2; }
        else if(t=="MUL") { flag=3; }
        else if(t=="DIV") { flag=4; }
        else if(t=="MOD") { flag=5; }
        else if(t=="EQUAL")
        {
            cout<<rchange(a[0],k)<<endl;
        }
        else if(t=="CLEAR"){ j=1;}
    }
    return 0;
}

  

猜你喜欢

转载自www.cnblogs.com/chrysanthemum/p/12737153.html
今日推荐