<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(num2 == "0" || num1 == "0") return "0";
       vector<string> a;
        string s;
        for(int i = num2.size() - 1; i >= 0; i--){
            int n = 0;
            for(int j = num1.size() - 1; j >= 0; j--){
                int t = (num2[i] - '0') * (num1[j] - '0') + n;
                if(t > 9 && j == 0) s = to_string(t) + s;
                else if(t > 9){
                    s = to_string(t % 10) + s;
                    n = t / 10;
                }
                else {
                    n = 0;
                    s = to_string(t) + s;
                }
            }
            a.push_back(s);
            s = "";
        }
        for(auto i : a){
            cout << i << endl;
        }
        s = a[0];
        for(int i = 1; i < a.size(); i++){
            int d = s.size() - 1 - i;
            int f = a[i].size() - 1;
            int n = 0;
            while(d >= 0){
                int t = (s[d] - '0') + (a[i][f] - '0') + n;
                if(t > 9){
                    s[d] = (char)(t - 10 + (int)'0');
                    n = 1;
                }
                else {
                    s[d] = (char)(t + (int)'0');
                    n = 0;
                }
                d--;
                f--;
            }
            if(f != -1){
                while(f >= 0){
                    int t = n + (a[i][f] - '0');
                    if(f == 0 && t > 9) s = to_string(t) + s;
                    else if(t > 9){
                        s = to_string(t - 10) + s;
                        n = 1;
                    }
                    else {
                        n = 0;
                        s = to_string(t) + s;
                    }
                    f--;
                }
                
            }
            else if(n == 1 && f == -1){
                s = '1' + s;
            }
        }
        return s;
    }
};
27814