개념

정수 자료형

정수를 저장할 때는 입력뿐 아니라 계산 중간에 만들어지는 값의 범위도 확인합니다. 길이가 NN인 배열의 각 값이 최대 AA이면 합은 최대 NANA입니다.

항목C++JavaPython
대회에서 흔히 쓰는 기본 정수intintint
더 큰 정수long longlong같은 int
정수 최댓값 확인numeric_limits<int>::max()Integer.MAX_VALUE메모리가 허용하는 크기까지 확장

Java의 int는 −231-2^{31}부터 231−12^{31}-1까지, long은 −263-2^{63}부터 263−12^{63}-1까지 저장합니다. C++의 자료형 크기는 구현에 따라 정해지며, 일반적인 대회 환경의 int는 32비트, long long은 64비트입니다.

Python 정수는 값이 커지면 저장 공간도 늘어납니다. 큰 정수의 연산 비용은 자릿수의 영향을 받습니다.

연산 도중의 오버플로

자료형이 표현할 수 있는 범위를 벗어나면 오버플로가 발생합니다. C++의 부호 있는 정수 오버플로는 동작이 정의되지 않으며, Java에서는 자료형의 비트 수를 넘는 윗부분이 버려져 의도한 값과 다른 결과가 나옵니다.

C++과 Java에서 두 int를 곱한 뒤 더 큰 범위의 정수형 변수에 저장하더라도, 곱셈 자체가 int로 수행되면 중간 결과가 먼저 int 범위를 벗어날 수 있습니다. 곱하는 두 수 중 하나를 더 큰 범위의 자료형으로 바꾼 뒤 곱해야 합니다.

동작C++JavaPython
넓은 정수로 곱셈1LL * a * b1L * a * ba * b

복잡도

아래 예제의 두 길이와 곱은 크기가 제한된 정수입니다.

연산시간복잡도공간복잡도
두 길이의 곱O(1)O(1)추가 O(1)O(1)

예제

문제

직사각형의 넓이를 구하여라.

입력

첫째 줄에 직사각형의 가로 길이 AA와 세로 길이 BB가 공백을 사이에 두고 주어진다. 1≤A,B<10 0001\le A,B<10\,000이다.

출력

직사각형의 넓이를 출력한다.

예제 입력

4 7

예제 출력

28

예제 코드

C++20

#include <iostream>

using namespace std;

int main() {
    int a, b;
    long long area;

    cin >> a >> b;

    // 곱셈 전에 long long으로 확장
    area = 1LL * a * b;

    cout << area << '\n';
}