Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 나눗셈(/)과 나머지(%) 연산자 없이 5의 배수 판별하기

이 글에서는 나눗셈(/)과 나머지(%) 연산자를 사용하지 않고 어떤 숫자가 5로 나누어 떨어지는지 확인하는 방법을 알아봅니다.

가장 일반적인 방법은 num % 5 == 0인지 검사하는 것이지만, 여기서는 이 두 연산자를 쓰지 않는다는 조건이 있습니다. 대신 수학적 성질을 활용하면 훨씬 간단하게 문제를 해결할 수 있습니다.

핵심 아이디어

5의 배수에는 명확한 규칙이 있습니다. 바로 마지막 자릿수(일의 자리)가 반드시 0 또는 5라는 점입니다. 예를 들어 10, 15, 25, 100, 125처럼 5의 배수는 모두 이 규칙을 따릅니다.

따라서 주어진 숫자의 마지막 자릿수만 확인하면 되고, 이는 나눗셈 연산 없이도 손쉽게 판별할 수 있습니다.

숫자를 문자열로 다루는 이유

이 방법의 큰 장점은 숫자를 문자열로 처리할 수 있다는 것입니다. C++의 기본 정수형인 intlong long으로 표현할 수 없는 매우 큰 숫자도 문자열로 입력받아 마지막 문자만 검사하면 되기 때문에, 자릿수 제한 없이 5의 배수 여부를 확인할 수 있습니다.

예제 코드

#include <bits/stdc++.h>
using namespace std;

bool isDiv5(string num) {
    int n = num.length();
    // 마지막 자릿수가 '5' 또는 '0'이 아니면 5의 배수가 아님
    if (num[n - 1] != '5' && num[n - 1] != '0')
        return false;
    return true;
}

int main() {
    string num = "154484585745184258458158245285265"; // 매우 큰 숫자도 문자열로 처리 가능
    if (isDiv5(num)) {
        cout << "Divisible";
    } else {
        cout << "Not Divisible";
    }
}

실행 결과

Divisible

정리

나눗셈과 나머지 연산자 없이 5의 배수를 판별하려면 숫자의 마지막 자릿수가 0 또는 5인지만 확인하면 됩니다. 숫자를 문자열로 다루면 int 범위를 훌쩍 넘는 초대형 숫자도 손쉽게 검사할 수 있어 실용성이 높습니다. 시간 복잡도 역시 마지막 문자 하나만 확인하므로 사실상 O(1)입니다.