细节还是蛮多的,如果为0的话要显示输出0,不然只有三十分。

模拟题还是菜了点,基础不够扎实。。。

#include<bits/stdc++.h>
using namespace std;
long long sum;
int base = 10;
long long read()
{
	string s; cin >> s;
	long long x = 0;
	for(int i = 0; i < s.size(); ++i)
	{
		long long tmp = isdigit(s[i])? s[i]-'0':s[i]-'A'+10;
		x = x * base + tmp;
	}
	return x;
}
void print()
{
	long long x = sum;
	vector<char> v;
	while(x)
	{
		int cur = x % base;
		if(cur <= 9) v.push_back(cur+'0');
		else v.push_back(cur-10+'A');
		x /= base;
	}
	if(v.size()==0) cout << 0; //没有它只有三十分 
	for(int i = v.size()-1; ~i; --i) cout << v[i];
	cout << "\n";
}
int main()
{
	int n; scanf("%d",&n);
	string op; int opt=0;
	while(n--)
	{
		cin >> op;
		if(op=="CLEAR") opt = sum = 0;
		else if(op=="ADD") opt = 1;
		else if(op=="SUB") opt = 2;
		else if(op=="MUL") opt = 3;
		else if(op=="DIV") opt = 4;
		else if(op=="MOD") opt = 5;
		else if(op=="CHANGE") cin >> base;
		else if(op=="EQUAL") print();
		else if(op=="NUM")
		{
			switch(opt)
			{
				case 0: sum  = read(); break;
				case 1: sum += read(); break;
				case 2: sum -= read(); break;
				case 3: sum *= read(); break;
				case 4: sum /= read(); break;
				case 5: sum %= read(); break;
			}
		}
	}
}