<p>The <strong>array-form</strong> of an integer <code>num</code> is an array representing its digits in left to right order.</p>

<ul>
	<li>For example, for <code>num = 1321</code>, the array form is <code>[1,3,2,1]</code>.</li>
</ul>

<p>Given <code>num</code>, the <strong>array-form</strong> of an integer, and an integer <code>k</code>, return <em>the <strong>array-form</strong> of the integer</em> <code>num + k</code>.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> num = [1,2,0,0], k = 34
<strong>Output:</strong> [1,2,3,4]
<strong>Explanation:</strong> 1200 + 34 = 1234
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> num = [2,7,4], k = 181
<strong>Output:</strong> [4,5,5]
<strong>Explanation:</strong> 274 + 181 = 455
</pre>

<p><strong class="example">Example 3:</strong></p>

<pre>
<strong>Input:</strong> num = [2,1,5], k = 806
<strong>Output:</strong> [1,0,2,1]
<strong>Explanation:</strong> 215 + 806 = 1021
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= num.length &lt;= 10<sup>4</sup></code></li>
	<li><code>0 &lt;= num[i] &lt;= 9</code></li>
	<li><code>num</code> does not contain any leading zeros except for the zero itself.</li>
	<li><code>1 &lt;= k &lt;= 10<sup>4</sup></code></li>
</ul>

class Solution {
public:
    vector<int> addToArrayForm(vector<int>& num, int k) {
        int carry = 0,n = num.size() - 1;
        vector<int> ret;
        while(k != 0 && n >= 0) {
            num[n] += (k % 10) + carry;
            k = floor(k/10);
            carry = floor(num[n]/10);
            num[n] = num[n] % 10;
            n--;
        }

        if(k != 0) {
            k += carry;
            while (k != 0) {
                ret.push_back(k%10);
                k = floor(k/10);
            }
            reverse(ret.begin(), ret.end());
            for (auto i : num) {
                ret.push_back(i);
            }
            return ret;
        } else {
            if (carry != 0) {
                while (carry != 0 && n >= 0) {
                    num[n] += carry;
                    carry = floor(num[n]/10);
                    num[n] = num[n] % 10;
                    n--;
                }
                if (n < 0 && carry != 0) {
                    ret.push_back(carry);
                }
                for (auto i : num) {
                    ret.push_back(i);
                }
                return ret;
            } else {
                return num;
            }
        }
    }
};
30600