2024. 3. 11. 00:06ㆍTech: 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;
}
};
지금까지 문제 중에 제일 깔끔했던 이해..!
'Tech: Algorithm' 카테고리의 다른 글
[Leetcode] 9. Palindrome Number (0) | 2024.03.12 |
---|---|
[Leetcode] 8. String to Integer (atoi) (0) | 2024.03.12 |
[Leetcode] 6. Zigzag Conversion (0) | 2024.03.08 |
[Leetcode] 5. Longest Palindromic Substring (0) | 2024.03.07 |
[Leetcode] 4. Median of Two Sorted Arrays (3) | 2024.03.06 |