思路:
输入、输出数据的时候进行进制转化,过程中均用long long类型保存、运算,执行CLEAR时进制不能改变,其它照着题意模拟即可;
代码:
#include<iostream>
using namespace std;
typedef long long LL;
LL x,y;
LL base=10;
bool fst;//当前是否输入基础值
string cmd;
LL to_num(char c){
if(c>='0'&&c<='9') return c-'0';
else return c-'A'+10;
}
char to_c(LL n){
if(n>=0&&n<=9) return n+'0';
else return n-10+'A';
}
LL to_Dec(string s){
LL rs=0,pow=1;
for(int pos=s.length()-1;pos>=0;pos--){
rs+=to_num(s[pos])*pow;
pow*=base;
}
return rs;
}
void print(){
string s="";
LL num=x;
do{
s=to_c(num%base)+s;
num/=base;
}while(num);
cout<<s<<'
';
}
void cal(){
if(cmd=="ADD") x+=y;
else if(cmd=="SUB") x-=y;
else if(cmd=="MUL") x*=y;
else if(cmd=="DIV") x/=y;
else if(cmd=="MOD") x%=y;
}
int main(){
int n;
cin>>n;
while(n--){
string s;
cin>>s;
if(s=="NUM"){
string num;
cin>>num;
if(fst) x=to_Dec(num);
else{
y=to_Dec(num);
cal();
}
}else if(s=="ADD"||s=="SUB"||s=="MUL"||s=="DIV"||s=="MOD"){
cmd=s;
fst=0;
}
else if(s=="CHANGE") cin>>base;
else if(s=="EQUAL") print();
else if(s=="CLEAR") {x=y=0;fst=1;}
}
return 0;
}