ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 정수 - 수를 처리하는 방법
    기본(Basic) 2021. 1. 6. 12:43
    반응형

     경진 프로그램에서 가장 많이 사용되는 정수 자료형은 int 이다. 이 자료혀은 32bit 자료형이며 범위는 -2^32 ... 2^31-1(대략 -2*10^9 ... 2*10^9)이다. 만일 int로는 부족하다면 64bit 자료형인 long long을 사용하면 된ㄴ다. 이 자료형의 범위는 -2^64 ... 2^63-1(대략 -2*10^18 ... 2*10^18)이다.

     

     다음 코드에 long long 변수를 정의하는 방법이 나와 있다.

     

    long long x = 123456789123456789LL;

     

    접미사 LL은 이 정수값이 자료형이 long long임을 의미한다.

     long long 자료형을 사용하다 보면 코드의 다른 어딘가에서 여전히 int 자료형을 사용하는 실수를 종종 하게 된다. 예를 들어 다음 코드에는 교묘한 버그가 숨어 있다.

     

    int a = 123456789;
    long long b = a*a;
    cout << b << "\n"; // -1757895751

     

     비록 값을 저장할 변수의 자료형은 long long 이지만, 계산식 a*a에 포함된 두 수의 자료형이 모두 int이기 때문에 결과 또한 int가 된다. 이러한 이유로 인해 변수 b에는 잘못된 값이 저장된다. 이문제를 해결하려면 a의 자료형을 long long으로 바꾸거나 계산식을 (long long)a*a로 바꾸면 된다.

     

    예시 1)

    long long a = 123456789;
    long long b = a*a;
    cout << b << "\n"; // -1757895751

     

    예시 2)

    int a = 123456789;
    long long b = (long long)a*a;
    cout << b << "\n"; // -1757895751

     

     대부분의 대회 문제는 long long 자료형을 사용하면 충분하도록 출제된다. 그렇다라도 g++ 컴팡이러가 128bit 자료형인 __int128_t를 지원한다는 사실을 알아두면 도움이 될 것이다. 그러나 모든 대회 시스템이 이 자료형을 지원하지는 않는다.

    반응형

    '기본(Basic)' 카테고리의 다른 글

    숫자 - 펠린드롬(Palindrome) 인지 확인 하기  (0) 2021.01.06
    순열 출력하기  (0) 2021.01.06
    정수 - 수를 처리하는 방법  (0) 2021.01.06
    출력(C++ cout)  (0) 2021.01.06
    입력(C++ cin)  (0) 2021.01.06

    댓글

Designed by Tistory.