알고리즘 7 정수 반전

3364 단어
32 비트 의 기호 정 수 를 보 여 주 려 면 이 정수 중의 모든 숫자 를 반전 시 켜 야 한다.예제 1: 입력: 123 출력: 321 예제 2: 입력: - 123 출력: - 321 예제 3: 입력: 120 출력: 21 주의: 우리 의 환경 이 32 비트 의 기호 정수 만 저장 할 수 있다 고 가정 하면 그 수치 범 위 는 [− 2 ^ 31,  2^31 − 1]。이 가설 에 따 르 면 반전 후 정수 가 넘 치면 0 으로 돌아 갑 니 다.출처: 스냅 백 (LeetCode) 링크:https://leetcode-cn.com/problems/reverse-integer저작권 은 인터넷 에 귀속 된다.상업 전 재 는 정부 에 연락 하여 권한 을 부여 해 주 십시오. 비 상업 전 재 는 출처 를 밝 혀 주 십시오.
이 문 제 는 비교적 간단 한데, 유일한 난점 은 넘 치 는 것 이다.제목 에 조건 이 정 해 져 있 고 32 비트 의 기호 정수 만 저장 할 수 있 으 며 댓 글 에는 long 등 더 큰 값 으로 판단 을 저장 하 는 경우 가 많 습 니 다.어떤 것 은 이미 알 고 있 는 몇 가지 조건 을 직접 사 용 했 는데, 느낌 도 그다지 맞지 않 고, 통용 되 지 않 는 다.c + + 의 매크로 INT 사용 하기MAX 와 INT민 씨 도 별로 좋 지 않 아 요. 31 자리 나 30 자리 제한 이 라면 스스로 계산 해 야 해 요.int 의 최대 최소 값 을 스스로 계산 합 니 다.
class Solution {
public:
    int reverse(int x) {
        int ret = 0;
        int maxint = (1<<31)-1;
        int minint = 1 << 31;
        while(x != 0)
        {
            int pop = x % 10;
            x = x / 10;
            if(ret > 0 && ret > maxint / 10 || (ret == maxint / 10 && pop > maxint % 10))
            {
                return 0;
            }
            else if(ret < 0 && ret < minint / 10 || (ret == minint / 10 && pop < minint % 10))
            {
                return 0;
            }
            ret = ret * 10 + pop;
        }
        return ret;
    }
};

좋은 웹페이지 즐겨찾기