이번 글에서는 숫자를 입력받아 해당 숫자가 자기 분할 숫자(self-dividing number)인지 판별하는 자바스크립트 함수를 작성해 보겠습니다.
자기 분할 숫자란 무엇일까요?
- 자기 분할 숫자란 자신을 구성하는 모든 자릿수로 나누어 떨어지는 수를 의미합니다.
- 자기 분할 숫자라면 "이 숫자는 자기 분할 숫자입니다"를, 그렇지 않다면 "이 숫자는 자기 분할 숫자가 아닙니다"를 출력해야 합니다.
예시로 이해하기
- 128은 자기 분할 숫자입니다. 각 자릿수인 1, 2, 8이 모두 128을 나누어 떨어뜨릴 수 있기 때문입니다.
- 102는 자기 분할 숫자가 아닙니다. 0이라는 자릿수를 포함하고 있는데, 어떤 수도 0으로 나눌 수 없기 때문입니다.
- 26 역시 자기 분할 숫자가 아닙니다. 26을 자릿수 6으로 나누면 나누어 떨어지지 않기 때문입니다.
구현 코드
위 조건을 만족하는 코드는 다음과 같습니다.
const num1 = 128;
const num2 = 102;
const num3 = 26;
const selfDivisible = num => {
let n = num; // 원본 숫자 저장
while(num){
let temp = num % 10; // 마지막 자릿수 추출
if(n % temp !== 0){ // 자릿수로 나누어 떨어지지 않으면
return false;
}
num = Math.floor(num / 10); // 마지막 자릿수 제거
}
return true;
};
console.log(selfDivisible(num1));
console.log(selfDivisible(num2));
console.log(selfDivisible(num3));
코드 동작 원리
- 처음 입력된 숫자를 변수
n에 따로 저장해 둡니다. while반복문 안에서num % 10을 이용해 숫자의 마지막 자릿수를 하나씩 추출합니다.- 추출한 자릿수로 원본 숫자
n을 나눈 나머지가 0이 아니라면 즉시false를 반환합니다. Math.floor(num / 10)으로 마지막 자릿수를 제거한 뒤 남은 자릿수를 계속 검사합니다.- 모든 자릿수 검사를 통과하면 최종적으로
true를 반환합니다.
참고로 숫자에 0이 포함된 경우, 자바스크립트에서 n % 0의 결과는 NaN이 되고 이는 0과 같지 않으므로 자동으로 false가 반환됩니다. 따라서 별도의 0 처리 로직 없이도 올바르게 동작합니다.
출력 결과
콘솔에 출력되는 결과는 다음과 같습니다.
true false false
128은 자기 분할 숫자이므로 true, 102와 26은 자기 분할 숫자가 아니므로 false가 출력되는 것을 확인할 수 있습니다.