<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.size() > num2.size()) {
            swap(num1, num2);
        }

        reverse(num1.begin(), num1.end());
        reverse(num2.begin(), num2.end());
        cout<<num1<<" "<<num2<<endl;
        vector<vector<int>> nums;

        for (int i = 0; i < num1.size(); i++) {
            vector<int> temp;

            for (int k = 0; k < i; k++) {
                temp.push_back(0);
            }

            int num = num1[i] - '0';
            int c = 0;
            for (int j = 0; j < num2.size(); j++) {
                int sum = num * (num2[j] - '0') + c;
                c = sum/10;
                int rem = sum % 10;
                temp.push_back(rem);
            }
            temp.push_back(c);
            nums.push_back(temp);
        }

        
        
        int sz = nums.back().size();

        for (int i = 0; i < nums.size(); i++) {
            while (nums[i].size() < sz) {
                nums[i].push_back(0);
            }
        }

        for (auto v : nums) {
            for(auto x : v) {
                cout<<x<<" ";
            }

            cout<<endl;
        }



        vector<int> ans;
        int c = 0;
        for (int j = 0; j < nums[0].size(); j++) {
            int sum = 0;
            for (int i = 0; i < nums.size(); i++) {
                sum += nums[i][j];
            }

            int d = (sum + c)%10;
            
            c = (sum+c)/10;
            
            ans.push_back(d);
        }
        ans.push_back(c);

        while (ans.size() > 1 and ans.back() == 0) {
            ans.pop_back();
        }

        reverse(ans.begin(), ans.end());
        string fans = "";

        for (auto num : ans) {
            fans += to_string(num);
        }

        return fans;
    }
};


/*
321
654
*/
25035