leetcode / top_interview / 2일차 문제입니다.
123 -> 321 이런 식으로 바꾸는 문제입니다.
leetcode.com/problems/reverse-integer
class Solution {
public:
int reverse(int x) {
bool signX = false;
if(x < 0 && x != INT_MIN){ signX = true; x *= -1;}
int answer = 0;
while( x > 0)
{
if( answer <= INT_MAX /10)
{
answer *= 10;
answer += x%10;
x /= 10;
}
else
return 0;
}
return signX ? answer * -1 : answer;
}
};

처음에는 x 를 나눠서 무조건 answer를 10곱한 후 더 하게했다가,
INT_MAX : 2147483647 보다 작지만
error : 777777777 같은 경우 *10에서 overflow가 발생했다.
그 후에는 x에 INT_MIN이 들어와서 에러가 발생하고 말았고,
예외처리를 둘다 해준 후에야 문제를 풀 수 있었다.
#include <limit.h> -> int_max , int_min등을 사용가능하게 한다.
같이 보면 좋을 것 같은 개념 : 2의 보수, overflow