<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) {
        if (num1[0] == '0' || num2[0] == '0') {
            return "0";
        }
        
        int n = num1.length() - 1;
        int m = num2.length() - 1;
        string answer;

        for (int a = n; a >= 0; --a) {
            int b = m;
            int remainder = 0;
            while (b >= 0 || remainder > 0) {
                int answer_index = m - b + n - a;
                while (answer.length() <= answer_index) {
                    answer += '0';
                }
                int result = remainder + (answer[answer_index] - '0');
                if (b >= 0) {
                    result += (num1[a] - '0') * (num2[b] - '0'); 
                }

                answer[answer_index] = ('0' + result % 10);
                remainder = result / 10;
                --b;
            }
        }

        reverse(answer.begin(), answer.end());
        return answer;
    }
};
8054