Multiplying two large numbers

 
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string add(string num1, string num2) {
    string result; //reversed
    int idx1 = num1.size()-1, idx2 = num2.size() - 1, carry = 0, sum;
    char temp;
    while (idx1 >= 0 && idx2 >= 0) {
        int digit1 = num1[idx1] - '0';
        int digit2 = num2[idx2] - '0';
        sum = carry + digit1 + digit2;
        temp = (sum % 10) + '0';
        result.push_back(temp);
        carry = sum / 10;
        idx1--; idx2--;
    }
    while (idx1 >= 0) {
        int digit1 = num1[idx1] - '0';
        sum = carry + digit1;
        temp = (sum % 10) + '0';
        result.push_back(temp);
        carry = sum / 10;
        idx1--;
    }
    while (idx2 >= 0) {
        int digit2 = num2[idx2] - '0';
        sum = carry + digit2;
        temp = (sum % 10) + '0';
        result.push_back(temp);
        carry = sum / 10;
        idx2--;
    }
    while (carry) {
        sum = carry;
        temp = (sum % 10) + '0';
        result.push_back(temp);
        carry = sum / 10;
    }
    reverse(result.begin(), result.end());
    return result;
}
string subMultiply(string num1, char num2) {
    //num2 is of single digit
    string result; // reversed
    int num = num2 - '0';
    int idx1 = num1.size() - 1, carry = 0, sum;
    char temp;
    while (idx1 >= 0) {
        int digit1 = num1[idx1] - '0';
        sum = carry + (digit1 * num);
        temp = (sum % 10) + '0';
        result.push_back(temp);
        carry = sum / 10;
        idx1--;
    }
    while (carry) {
        sum = carry;
        temp = (sum % 10) + '0';
        result.push_back(temp);
        carry = sum / 10;
    }
    reverse(result.begin(), result.end());
    return result;
}
string multiplyByPow10(string num, int power) {
    if (power == 0) return num;
    string result(num);
    for (int i = 1; i <= power; i++) result.push_back('0');
    return result;
} 
string multiply(string num1, string num2) {
    if (num1[0] == '0' || num2[0] == '0') return "0";
    int n = num2.size();
    string result = "0";
    for (int i = 0; i < n; i++) {
        string subResult = multiplyByPow10(subMultiply(num1, num2[n-i-1]), i);
        result = add(result, subResult);
    }
    return result;
}
int main() {
	string num1, num2;
	cout << "Enter two positive numbers without any leading zeroes" << endl;
	cout << "num1: ";
	cin >> num1;
	cin.ignore(1, '\n');
	cout << "num2: ";
	cin >> num2;
	cout << "Ans: " << multiply(num1, num2) << endl;
	return 0;
}

 

 

Comments