Skip to content

문제 13 · 2·4의 배수 판별 오류 수정

문제 13 [3점]

수정이는 사용자로부터 입력받은 임의의 정수가 2의 배수, 4의 배수인지 여부를 출력하고자 한다. 아래 코드에 오류가 있는지 확인하고 수정하시오. (오류가 없으면 '오류 없음'이라고 쓰시오.)

cpp
cout << "임의의 정수를 입력하세요: ";
int num;
cin >> num;

if (num % 4 == 0)
    cout << "입력 정수는 4의 배수입니다.";
else
    cout << "입력 정수는 2의 배수입니다.";
풀이 및 해설

논리 오류가 있습니다.

else 가지는 "4의 배수가 아닌 모든 수"에서 실행되는데, 그런 수가 반드시 2의 배수인 것은 아닙니다. 예를 들어 3 을 입력하면 4의 배수가 아니므로 else로 가서 "2의 배수입니다"를 출력하지만, 3은 2의 배수가 아닙니다. 즉 홀수에 대해 잘못된 답을 출력합니다.

수정: 2의 배수 여부를 num % 2 == 0으로 따로 검사해야 합니다. 4의 배수는 2의 배수이기도 하므로, 더 강한 조건인 4의 배수를 먼저 확인합니다.

cpp
cout << "임의의 정수를 입력하세요: ";
int num;
cin >> num;

if (num % 4 == 0)
    cout << "입력 정수는 4의 배수입니다.";
else if (num % 2 == 0)
    cout << "입력 정수는 2의 배수입니다.";
else
    cout << "입력 정수는 2의 배수도 4의 배수도 아닙니다.";
else if (num % 2 == 0) 가지를 추가해 홀수를 걸러낸다

👉 실습(C++)에서 확인하기

PDF