33.3 3과 5의 공배수 처리하기

3의 배수와 5의 배수는 출력했지만 3과 5의 공배수를 출력하지는 못했습니다. 3과 5의 공배수는 어떻게 출력해야 할까요? 공배수는 다음과 같이 논리 연산자 &&를 사용하면 됩니다.

fizzbuzz.c

#include <stdio.h>

int main()
{
    for (int i = 1; i <= 100; i++)      // 1부터 100까지 100번 반복
    {
        if (i % 3 == 0 && i % 5 == 0)   // 3과 5의 공배수일 때
            printf("FizzBuzz\n");       // FizzBuzz 출력
        else if (i % 3 == 0)            // 3의 배수일 때
            printf("Fizz\n");           // Fizz 출력
        else if (i % 5 == 0)            // 5의 배수일 때
            printf("Buzz\n");           // Buzz 출력
        else
            printf("%d\n", i);          // 아무것도 해당되지 않을 때 숫자 출력
    }

    return 0;
}

실행 결과

... (생략)
FizzBuzz
91
92
Fizz
94
Buzz
Fizz
97
98
Fizz
Buzz

i % 3 == 0 && i % 5 == 0처럼 i를 3으로 나눴을 때 나머지가 0이면서 5로 나눴을 때도 나머지가 0이면 3과 5의 공배수입니다. 그러므로 이때는 printf"FizzBuzz"를 출력해줍니다.

만약 i30인데 if에서 3이나 5의 배수를 먼저 검사해버리면 3과 5의 공배수는 검사를 하지 않고 그냥 넘어가게 되므로 주의해야 합니다. 따라서 3과 5의 공배수를 먼저 검사한 뒤 else if로 3의 배수, 5의 배수를 검사해야 합니다.

if (i % 3 == 0)                      // i가 30이면 
    printf("Fizz\n");                // Fizz를 출력하고 그냥 넘어가버림
else if (i % 5 == 0)
    printf("Buzz\n");
else if (i % 3 == 0 && i % 5 == 0)   // 3과 5의 공배수는 검사하지 못함
    printf("FizzBuzz\n");
else
    printf("%d\n", i);