Day38: [蓝桥杯真题] 小计算器

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;
}
发布了49 篇原创文章 · 获赞 13 · 访问量 507

猜你喜欢

转载自blog.csdn.net/qq2215459786/article/details/103689967