细节还是蛮多的,如果为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;
}
}
}
}