题解
2024-12-24 19:35:42
发布于:江苏
17阅读
0回复
0点赞
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int B;
// 将字符转换为对应的数值
int char_to_digit(char c) {
if (c >= '0' && c <= '9') return c - '0';
return c - 'A' + 10;
}
// 将数值转换为对应的字符
char digit_to_char(int d) {
if (d < 10) return '0' + d;
return 'A' + (d - 10);
}
string add_b_base(const string &a, const string &b, int B) {
string result;
int carry = 0;
int i = a.size() - 1, j = b.size() - 1;
while (i >= 0 || j >= 0 || carry > 0) {
int sum = carry;
if (i >= 0) sum += char_to_digit(a[i--]);
if (j >= 0) sum += char_to_digit(b[j--]);
carry = sum / B;
result.push_back(digit_to_char(sum % B));
}
reverse(result.begin(), result.end());
return result;
}
int main() {
cin >> B;
string num1, num2;
cin >> num1 >> num2;
// Ensure both strings are of the same length by padding with leading zeros
if (num1.size() < num2.size()) {
num1 = string(num2.size() - num1.size(), '0') + num1;
} else if (num2.size() < num1.size()) {
num2 = string(num1.size() - num2.size(), '0') + num2;
}
cout << add_b_base(num1, num2, B) << endl;
return 0;
}
1.字符转换:使用cpp char_to_digit
和 cpp digit_to_char
函数来处理字符和数值之间的转换,避免复杂的条件判断。
2.加法逻辑:在 xcpp digit_to_char
函数中,逐位相加并处理进位,所有操作在一次遍历中完成。
3.字符串处理:直接使用字符串来存储和处理 B 进制数,避免了复杂的数组操作。
4.输入对齐:确保两个输入字符串长度相同,通过在较短的字符串前面补零来总结
这里空空如也
有帮助,赞一个