模拟即可,注意输出时候大于等于10的数要输出字母,比如16进制下,10~15用A~F表示;
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<stack>
#include<cstring>
using namespace std;
typedef long long ll;
const double epos=1.0e-7;
const int inf=0x3f3f3f3f;
stack<char>ss;
char lll[9]="CHANGE";
int check(char s[]){//判断是不是进制转换;
int len=strlen(s);
if(len<6) return 0;
for(int i=0;i<6;++i){
if(s[i]!=lll[i]) return 0;
}
return 1;
}
char s[999];
int main(){
int n;
ll num;
scanf("%d",&n);
getchar();
int jinzhi=10;
int biao=0;//0,1,2,3,4,5清空,运算;
ll y=0;
while(n--){
gets(s);
if(strcmp(s,"CLEAR")==0){
num=0;
biao=0;
y=0;
}
else if(strcmp(s,"EQUAL")==0){
ll yy=num;
if(yy==0){
printf("0\n");
continue;
}
while(yy){
int hh=yy%jinzhi;
if(hh>=10) ss.push((char)(hh-10+'A'));
else ss.push((char)(hh+'0'));
yy/=jinzhi;
}
while(!ss.empty()){
printf("%c",ss.top());
ss.pop();
}
printf("\n");
}
else if(strcmp(s,"ADD")==0){
biao=1;
}
else if(strcmp(s,"SUB")==0){
biao=2;
}
else if(strcmp(s,"MUL")==0){
biao=3;
}
else if(strcmp(s,"DIV")==0){
biao=4;
}
else if(strcmp(s,"MOD")==0){
biao=5;
}
else if(check(s)){
int t=0;
int len=strlen(s);
for(int i=7;i<len;++i)
if(s[i]>='A'&&s[i]<='Z'){
t=t*10+s[i]-'A'+10;
}
else
t=t*10+s[i]-'0';
jinzhi=t;
}
else{
int len=strlen(s);
y=0;
for(int i=4;i<len;++i){
if(s[i]>='A'&&s[i]<='Z'){
y=y*jinzhi+s[i]-'A'+10;
}
else
y=y*jinzhi+s[i]-'0';
}
if(biao==0) num=y;
else if(biao==1) num+=y;
else if(biao==2) num-=y;
else if(biao==3) num*=y;
else if(biao==4) num/=y;
else num%=y;
}
}
return 0;
}