试题 历届试题 小计算器

代码

把k进制数转为10进制进行运算,
算完后再把这个10进制数转换为k进制

#include <iostream>
#include<string>
#include <algorithm>
using namespace std;


string Change_K(long long x, int k)         //结果转换即:10->k
{
    
    
	if (x == 0)
	{
    
    
		return "0";
	}
	string s;
	while (x)
	{
    
    
		if (x % k < 10)
		{
    
    
			s += (x % k) + '0';
		}
		else
		{
    
    
			s += (x % k) - 10 + 'A';
		}
		x /= k;
	}
	reverse(s.begin(), s.end());
	return s;
}

long long Change_10(string num, int k)         读取nun转换:即k->10
{
    
    
	long long x = 0;
	for (int i = 0; i < num.length(); i++)
	{
    
    
		if (num[i] >= '0' && num[i] <= '9')
			x = x * k + num[i] - '0';
		else
		{
    
    
			x = x * k + num[i] - 'A' + 10;
		}
	}
	return x;
}

long long opp(long long x, long long y, string op)     运算(10进制)
{
    
    
	if (op == "ADD")
	{
    
    
		return	x + y;
	}
	else if (op == "SUB")
	{
    
    
		return x - y;
	}
	else if (op == "MUL")
	{
    
    
		return x * y;
	}
	else if (op == "DIV")
	{
    
    
		return x / y;
	}
	else
	{
    
    
		return x % y;
	}
}

int main()
{
    
    
	int n = 0;
	cin>>n;
	long long x = 0;
	string num;
	string op;
	int k = 10;
	while (n--)
	{
    
    
		string s;
		cin >> s;
		if (s == "CLEAR")
		{
    
    
			op.clear();
			num.clear();
			x = 0;
		}
		else if (s == "CHANGE")
		{
    
    
			cin >> k;
		}
		else if (s == "EQUAL")
		{
    
    
			cout << Change_K(x, k) << endl;
			op.clear();
		}
		else if (s == "NUM")
		{
    
    
			cin >> num;
			if (!op.empty())
			{
    
    
				x = opp(x, Change_10(num, k), op);
			}
			else {
    
    
				x = Change_10(num, k);
			}
		}
		else {
    
    
			op = s;
		}
	}
	return 0;
}




猜你喜欢

转载自blog.csdn.net/Aurora____/article/details/105610293