Day38: [蓝桥杯真题] 小计算器
题源:
来自蓝桥杯题库:
http://lx.lanqiao.cn/problemsets.page
代码:
dirty code凑合看吧
#include<iostream>
#include<string>
#include<algorithm>
#include<functional>
using namespace std;
long long jzzh(string x,long long jinzhi) {//从任意进制转换为十进制
long long sum = 0,i=1,j=1;
for (int i=x.length()-1;i>=0;i--) {
if (x[i] >= '0'&&x[i] <= '9') {
sum += (x[i] - '0')*j;
}else{
sum += (x[i] - 'A'+10)*j;
}
j = j * jinzhi;
}
return sum;
}
string Print(long long n, int jinzhi)
{
if (n == 0)return "0";
string str;
while (n)
{
int tm = n % jinzhi;
if (tm <= 9) { str += '0' + tm; }
else { str += 'A' + tm - 10; }
n /= jinzhi;
}
reverse(str.begin(), str.end());
return str;
}
int main() {
long long N,jinzhi=10; cin >> N;
long long res1, res2;
string s1,ysf="",x="",y="";
for (long long i = 0;i<N; i++) {
cin >> s1;
if (s1 == "CLEAR") {
res1 = res2 = -1;
ysf = "";
}
else if(s1=="NUM"){
if (ysf == "") {
cin >> x;
res1=jzzh(x,jinzhi);
}
else {
cin >> y;
res2 = jzzh(y, jinzhi);
if (ysf == "ADD") res1 = res1 + res2;
else if (ysf == "SUB") res1 = res1 - res2;
else if (ysf == "MUL") res1 = res1 * res2;
else if (ysf == "DIV") res1 = res1 / res2;
else if (ysf == "MOD") res1 = res1 % res2;
res2 = -1;
ysf = "";
}
}
else if (s1=="CHANGE") cin >> jinzhi;
else if (s1 == "ADD") ysf = "ADD";
else if (s1 == "SUB") ysf = "SUB";
else if (s1 == "MUL") ysf = "MUL";
else if (s1 == "DIV") ysf = "DIV";
else if (s1 == "MOD") ysf = "MOD";
else if (s1 == "EQUAL") {
ysf = "";
cout << Print(res1, jinzhi)<<endl;
}
}
return 0;
}