<p>Given two non-negative integers <code>num1</code> and <code>num2</code> represented as strings, return the product of <code>num1</code> and <code>num2</code>, also represented as a string.</p>

<p><strong>Note:</strong>&nbsp;You must not use any built-in BigInteger library or convert the inputs to integer directly.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>
<pre><strong>Input:</strong> num1 = "2", num2 = "3"
<strong>Output:</strong> "6"
</pre><p><strong class="example">Example 2:</strong></p>
<pre><strong>Input:</strong> num1 = "123", num2 = "456"
<strong>Output:</strong> "56088"
</pre>
<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= num1.length, num2.length &lt;= 200</code></li>
	<li><code>num1</code> and <code>num2</code> consist of digits only.</li>
	<li>Both <code>num1</code> and <code>num2</code>&nbsp;do not contain any leading zero, except the number <code>0</code> itself.</li>
</ul>

class Solution {
public:

    string add(string str1, string str2){
        int n = str1.size(), m = str2.size();
        int maxi = max(n, m);
        int carry = 0;
        string res = "";
        for(int i = 0; i < maxi; i++){
            int num1 = 0, num2 = 0;
            if(i < n){
                num1 = str1[i]-'0';
            }
            if(i < m){
                num2 = str2[i]-'0';
            }
            int sum = num1 + num2 + carry;
            int digit = sum%10;
            carry = sum/10;
            res += to_string(digit);
        }
        while(carry){
            int digit = carry % 10;
            res += to_string(digit);
            carry = carry / 10;
        }
        return res;
    }


    string mul(string str, char ch, int ind, string prev){
        string temp = string(ind, '0');
        int carry = 0;
        int n = str.length();
        int num2 = ch -'0';
        for(int i = n-1; i >= 0; i--){
            int num1 = str[i]-'0';
            int val = ((num1*num2)+carry);
            carry = val/10;
            int digit = val%10;
            temp += to_string(digit);
        }
        while(carry){
            int digit = carry%10;
            temp += to_string(digit);
            carry = carry/10;
        }
        string curr = add(temp, prev);
        return curr;
    }

    string multiply(string num1, string num2) {
        if(num1 == "0" || num2 == "0") return "0";
        int m = num2.size();
        string prev = "0";
        for(int i = 0; i < m; i++){
            char ch = num2[m-1-i];
            string temp = mul(num1, ch, i, prev);
            prev = temp; 
        }
        reverse(prev.begin(), prev.end());
        return prev;
    }
};
17934