Integer Addition Implementation
High-precision arithmetic handles numbers exceeding built-in type limits using string representations. For integer addition:
string integer_addition(string num1, string num2) {
string result;
int carry = 0;
int len1 = num1.length(), len2 = num2.length();
int max_len = max(len1, len2);
if (len1 > len2)
num2 = string(len1 - len2, '0') + num2;
else
num1 = string(len2 - len1, '0') + num1;
for (int i = max_len - 1; i >= 0; i--) {
int digit_sum = (num1[i] - '0') + (num2[i] - '0') + carry;
carry = digit_sum / 10;
result.push_back((digit_sum % 10) + '0');
}
if (carry) result.push_back(carry + '0');
reverse(result.begin(), result.end());
return result;
}
Decimal Fraction Addition
For fractional parts, align decimal places by padding zeros to the right:
string fractional_addition(string frac1, string frac2) {
string result;
int carry = 0;
int len1 = frac1.length(), len2 = frac2.length();
int max_len = max(len1, len2);
if (len1 > len2)
frac2.append(len1 - len2, '0');
else
frac1.append(len2 - len1, '0');
for (int i = max_len - 1; i >= 0; i--) {
int digit_sum = (frac1[i] - '0') + (frac2[i] - '0') + carry;
carry = digit_sum / 10;
result.push_back((digit_sum % 10) + '0');
}
if (carry) result.push_back('x');
reverse(result.begin(), result.end());
return result;
}
Full Precision Addition
Combine integer and farctional components:
string full_addition(string num1, string num2) {
size_t dot1 = num1.find('.'), dot2 = num2.find('.');
string int1 = num1, int2 = num2, frac1, frac2;
if (dot1 != string::npos) {
int1 = num1.substr(0, dot1);
frac1 = num1.substr(dot1 + 1);
}
if (dot2 != string::npos) {
int2 = num2.substr(0, dot2);
frac2 = num2.substr(dot2 + 1);
}
string frac_result = fractional_addition(frac1, frac2);
if (!frac_result.empty() && frac_result[0] == 'x') {
int1 = integer_addition(int1, "1");
frac_result = frac_result.substr(1);
}
string int_result = integer_addition(int1, int2);
if (frac_result.find_first_not_of('0') == string::npos)
return int_result;
return int_result + '.' + frac_result;
}
Integer Subtraction
Handle borrowing between digits:
string integer_subtraction(string larger, string smaller) {
string result;
int borrow = 0;
int n = larger.length();
smaller = string(n - smaller.length(), '0') + smaller;
for (int i = n - 1; i >= 0; i--) {
int top_digit = larger[i] - '0' + borrow;
borrow = 0;
int bottom_digit = smaller[i] - '0';
if (top_digit < bottom_digit) {
top_digit += 10;
borrow = -1;
}
result.push_back(top_digit - bottom_digit + '0');
}
while (result.size() > 1 && result.back() == '0')
result.pop_back();
reverse(result.begin(), result.end());
return result;
}
Multiplication Algorithm
Implement grade-school multiplication method:
string multiply_integers(string num1, string num2) {
if (num1 == "0" || num2 == "0") return "0";
reverse(num1.begin(), num1.end());
reverse(num2.begin(), num2.end());
vector<int> products(num1.size() + num2.size(), 0);
for (int i = 0; i < num1.size(); i++) {
for (int j = 0; j < num2.size(); j++) {
products[i + j] += (num1[i] - '0') * (num2[j] - '0');
}
}
int carry = 0;
string result;
for (int &value : products) {
value += carry;
carry = value / 10;
result.push_back((value % 10) + '0');
}
while (carry) {
result.push_back(carry % 10 + '0');
carry /= 10;
}
while (result.back() == '0') result.pop_back();
reverse(result.begin(), result.end());
return result;
}