<p>Given a signed 32-bit integer <code>x</code>, return <code>x</code><em> with its digits reversed</em>. If reversing <code>x</code> causes the value to go outside the signed 32-bit integer range <code>[-2<sup>31</sup>, 2<sup>31</sup> - 1]</code>, then return <code>0</code>.</p>

<p><strong>Assume the environment does not allow you to store 64-bit integers (signed or unsigned).</strong></p>

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

<pre>
<strong>Input:</strong> x = 123
<strong>Output:</strong> 321
</pre>

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

<pre>
<strong>Input:</strong> x = -123
<strong>Output:</strong> -321
</pre>

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

<pre>
<strong>Input:</strong> x = 120
<strong>Output:</strong> 21
</pre>

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

<ul>
	<li><code>-2<sup>31</sup> &lt;= x &lt;= 2<sup>31</sup> - 1</code></li>
</ul>

class Solution {
public:
    int comp(string a, string b){
        int n = a.size();
        int m = b.size();
        int flag = 0;
        if(n<m) return 1;
        else{
            m = m-1;
            for(int i = 0;  i<n; i++){

                if(a[i]>b[(m)] && !flag){ return 0;}
                if(a[i]<b[(m)]){ return 1;}
                m--;
            }

            return 1;
        }
    }
    int reverse(int x) {
        if(!x) return x;
        if(x == INT_MIN) return 0;

        string all;
        string actual;
        int maxi = INT_MAX;
        while(maxi){
            all.push_back((maxi%10)+'0');
            maxi = maxi/10;
        }
        int temp = x>=0?x:-1*x;
    
        while(temp){
            actual.push_back((temp%10)+'0');
            temp = temp/10;
        }
        ::reverse(all.begin(),all.end());
        cout<<all<<" "<<actual;
        if(actual.size()<all.size() || actual<=all){
            temp = stoi(actual);
            return x>=0 ?temp:-1*temp;
        }
        else return 0;
    }
};
8700