模拟不同进制的加减法C++
时间: 2023-07-11 19:32:31 浏览: 158
二进制加减法模拟程序
4星 · 用户满意度95%
好的,我可以帮你编写一个可以模拟不同进制的加减法的C++程序。以下是示例代码:
```c++
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int char_to_int(char c) {
if (c >= '0' && c <= '9') {
return c - '0';
} else {
return c - 'A' + 10;
}
}
char int_to_char(int x) {
if (x >= 0 && x <= 9) {
return x + '0';
} else {
return x - 10 + 'A';
}
}
string add(string a, string b, int base) {
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
string res = "";
int carry = 0;
for (int i = 0; i < max(a.size(), b.size()); i++) {
int x = i < a.size() ? char_to_int(a[i]) : 0;
int y = i < b.size() ? char_to_int(b[i]) : 0;
int sum = x + y + carry;
carry = sum / base;
sum %= base;
res += int_to_char(sum);
}
if (carry) {
res += int_to_char(carry);
}
reverse(res.begin(), res.end());
return res;
}
string subtract(string a, string b, int base) {
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
string res = "";
int borrow = 0;
for (int i = 0; i < max(a.size(), b.size()); i++) {
int x = i < a.size() ? char_to_int(a[i]) : 0;
int y = i < b.size() ? char_to_int(b[i]) : 0;
int diff = x - y - borrow;
if (diff < 0) {
diff += base;
borrow = 1;
} else {
borrow = 0;
}
res += int_to_char(diff);
}
while (res.size() > 1 && res.back() == '0') {
res.pop_back();
}
reverse(res.begin(), res.end());
return res;
}
int main() {
int base;
string a, b;
char op;
cin >> base >> a >> op >> b;
if (op == '+') {
cout << add(a, b, base) << endl;
} else if (op == '-') {
cout << subtract(a, b, base) << endl;
} else {
cout << "Invalid operator" << endl;
}
return 0;
}
```
输入格式为:进制、第一个数、运算符、第二个数。其中,进制为10进制以下的正整数,数值为字符串形式,运算符可以为加号“+”或减号“-”。程序会输出计算结果。注意,该程序只支持10进制以下的进制。
阅读全文