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

本文介绍了蓝桥杯竞赛中的一道真题——小计算器的解题思路。通过链接提供了题目来源,并展示了相应的代码实现,尽管代码较为简陋。
摘要由CSDN通过智能技术生成

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值