이 글에서는 나눗셈(/)과 나머지(%) 연산자를 사용하지 않고 어떤 숫자가 5로 나누어 떨어지는지 확인하는 방법을 알아봅니다.
가장 일반적인 방법은 num % 5 == 0인지 검사하는 것이지만, 여기서는 이 두 연산자를 쓰지 않는다는 조건이 있습니다. 대신 수학적 성질을 활용하면 훨씬 간단하게 문제를 해결할 수 있습니다.
핵심 아이디어
5의 배수에는 명확한 규칙이 있습니다. 바로 마지막 자릿수(일의 자리)가 반드시 0 또는 5라는 점입니다. 예를 들어 10, 15, 25, 100, 125처럼 5의 배수는 모두 이 규칙을 따릅니다.
따라서 주어진 숫자의 마지막 자릿수만 확인하면 되고, 이는 나눗셈 연산 없이도 손쉽게 판별할 수 있습니다.
숫자를 문자열로 다루는 이유
이 방법의 큰 장점은 숫자를 문자열로 처리할 수 있다는 것입니다. C++의 기본 정수형인 int나 long 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)입니다.