高精度加法是处理大数运算的基本操作之一。 在C++中,由于标准整数类型无法表示任意大的整数,我们可以通过字符串或数组来实现高精度加法。 下面是一个使用字符串来实现的高精度加法函数: #include <iostream>
#include <string>
#include <algorithm>
// 高精度加法函数
std::string bigIntegerAdd(const std::string& num1, const std::string& num2) {
// 反转字符串以进行加法运算
std::string num1_reversed = num1;
std::string num2_reversed = num2;
std::reverse(num1_reversed.begin(), num1_reversed.end());
std::reverse(num2_reversed.begin(), num2_reversed.end());
std::string result;
int carry = 0;
int sum = 0;
int index1 = num1_reversed.size() - 1;
int index2 = num2_reversed.size() - 1;
// 逐位相加,直到两个数都遍历完
while (index1 >= 0 || index2 >= 0 || carry > 0) {
int digit1 = (index1 >= 0) ? num1_reversed[index1--] - '0' : 0;
int digit2 = (index2 >= 0) ? num2_reversed[index2--] - '0' : 0;
sum = digit1 + digit2 + carry;
carry = sum / 10;
result.push_back(sum % 10 + '0');
}
// 如果第一个数是负数,需要处理结果的符号
if (num1[0] == '-') {
std::reverse(result.begin(), result.end());
result = "-" + result;
}
return result;
}
int main() {
std::string num1 = "12345678901234567890";
std::string num2 = "9876543210987654321";
std::string sum = bigIntegerAdd(num1, num2);
std::cout << "Sum: " << sum << std::endl;
return 0;
}
这个函数bigIntegerAdd 接受两个字符串类型的大整数作为参数,通过反转这两个字符串来模拟从最低位开始的加法运算。 在加法过程中,我们逐位相加,并处理进位。如果加法的结果产生了进位,则将进位的值加到下一次的加法中。如果最终还有进位,则将其添加到结果的最前面。 请注意,这个函数假设输入的字符串是合法的非负整数。如果需要处理负整数或验证输入的有效性,你需要添加额外的逻辑。 此外,这个函数没有进行任何优化,对于非常大的数,效率可能不是最优的。
(责任编辑:admin) |