Implementing High-Precision Arithmetic with String Manipulation

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;
}

Tags: high-precision arithmetic string algorithms numerical computation C++

Posted on Mon, 03 Aug 2026 16:00:28 +0000 by dartcol