[Leetcode] 7. Reverse Integer

2024. 3. 11. 00:06Tech: Algorithm


Given a signed 32-bit integer x, return x with its digits reversed. If reversing x causes the value to go outside the signed 32-bit integer range [-2^31, 2^31 - 1], then return 0.

Assume the environment does not allow you to store 64-bit integers (signed or unsigned).

Example 1:

Input: x = 123
Output: 321

Example 2:

Input: x = -123
Output: -321

Example 3:

Input: x = 120
Output: 21

Constraints:

  • -2^31 <= x <= 2^31 - 1

Solution

숫자를 거꾸로 출력하는 건데 여기서 중요한 점은 unsigned int 그대로 사용, long 변수를 쓰면 안 된다는 점이다.

x를 10으로 나눈 나머지를 y에 넣고 ret = ret*10 + y , x /=10 을 하는 식으로 하면 되는데 overflow가 발생할 수 있는 부분은 ret*10이 되는 부분이다

아래와 같이 overflow가 남..

Line 10: Char 30: runtime error: signed integer overflow: 964632435 * 10 cannot be represented in type 'int' (solution.cpp) SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior prog_joined.cpp:19:30

이 부분을 ret*10 하기 전에 INT_MAX/10, INT_MIN/10과 비교하면 된다..!

class Solution {
public:
    int reverse(int x) {
        int y=0;
        int ret = 0;
        while(x!=0)
        {
            y=x%10;
            if (ret > INT_MAX/10 || ret < INT_MIN/10) return 0;
            ret = ret*10+y;
            x = x/10;
        }
        return ret;
    }
};

지금까지 문제 중에 제일 깔끔했던 이해..!