代码
把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;
}