<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 multiply(string num1, string num2) {
        int len1 = num1.length();
        int len2 = num2.length();

        if (len1 == 1) {
            if (num1[0] == '1')
                return num2;
            if (num1[0] == '0')
                return "0";
        } else if (len2 == 1) {
            if (num2[0] == '1')
                return num1;
            if (num2[0] == '0')
                return "0";
        }

        int carry = 0;
        string zeros = "";

        vector<string> products;

        for (int i = len1 - 1; i >= 0; i--) {
            int a = num1[i] - '0';
            string str = "";
            carry = 0;

            for (int j = len2 - 1; j >= 0; j--) {
                int b = num2[j] - '0';
                int mult = a * b + carry;
                carry = mult / 10;
                mult = mult % 10;

              

                str = to_string(mult) + str;
            }
            if (carry) {
                str = to_string(carry) + str;
            }
            str = str + zeros;
            products.push_back(str);
            zeros = zeros + "0";
        }

        string finalProduct = "";
        int maxLen = products[products.size() - 1].length();
        carry = 0;

        int l = 0;
        while (l < maxLen) {
            int sum = carry;
            for (int i = products.size() - 1; i >= 0; i--) {
                int strLen = products[i].length();
                if (l < strLen) {
                    int b = products[i][strLen - 1 - l] - '0';
                    sum = sum + b;
                }
            }
            carry = sum / 10;
            sum = sum % 10;
            finalProduct = to_string(sum) + finalProduct;

            l++;
        }

        if (carry) {
            finalProduct = to_string(1) + finalProduct;
        }

        return finalProduct;
    }
};
29975