<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>

import math

class Solution:
    def reverse(self, x: int) -> int:
        if not x:
            return x
        
        sign = -1 if x < 0 else 1
        x = x * sign
        cnt = int(math.log(x, 10)) + 1
        
        divider = 10
        result = 0
        zeros = 0
        for i in range(cnt):
            v = x % divider
            if v:
                result = result * (10 ** (zeros + 1)) + v 
                zeros = 0
            else:
                zeros += 1
            x = x // 10
        
        result = result * sign
        return result if (-2 ** 31) < result < (2 ** 31 - 1) else 0
            
            
16100