하샤드 숫자는 해당 자릿수의 합으로 정확히 나누어 떨어지는 숫자입니다. 숫자 126과 마찬가지로 1+2+6 =9로 완전히 나눌 수 있습니다.
-
모든 한 자리 숫자는 가혹한 숫자입니다.
-
하샤드 숫자는 [1,2,3,4,5,6,7,8,9,10],[110,111,112], [1010, 1011, 1012]와 같이 연속적인 클러스터에 종종 존재합니다.
우리가 할 일은 숫자를 입력으로 받는 함수를 작성하는 것입니다. 입력으로 숫자가 가혹한 숫자인지 여부를 확인하고, 그렇지 않으면 -1을 반환하고 그렇지 않으면 연속 harshad 클러스터의 길이를 반환합니다.
예를 들어 -
harshadNum(1014) = harshadNum(1015) = harshadNum(1016) = harshadNum(1017) = 4 harshadNum(1) = 10 harshadNum(12) = 1 harshadNum(23) = -1
이 문제를 두 가지 주요 기능으로 나누겠습니다.
-
isHarshad() → 숫자 num을 받아 숫자가 가혹한지 여부에 따라 부울을 반환합니다.
-
harshadNum() → 실제 숫자를 받는 main 함수는 다양한 지점에서 isHarshad()를 호출하고 줄무늬의 길이를 반환합니다.
isHarshad function() 코딩 -
const isHarshad = (num) => { let sum = 0, temp = num; while(temp){ sum += temp % 10; temp = Math.floor(temp/10); } return num % sum === 0; }
부울을 반환하는 아주 간단한 반복 함수
이제 heavyadNum() 함수를 코딩해 보겠습니다. -
const harshadNum = (number) => { //if the input is not harshad return -1 if(!isHarshad(number)){ return -1; } let streak = 1, prev = number-1, next = number+1; //check preceding streak while(isHarshad(prev) && prev > 0){ streak++; prev--; } //check succeeding streak while(isHarshad(next)){ streak++; next++; } return streak; }; console.log(harshadNum(1014));
위 코드 이해하기 -
-
입력이 가혹한지 확인하고, 그렇지 않으면 기능을 중지하고 -1을 반환합니다.
-
우리가 계속 가혹한 숫자를 얻는 동안 하나의 루프를 뒤로, 하나를 앞으로 실행하고 동시에 연속 연속 업데이트를 계속합니다.
-
마지막으로 연속 기록을 반환합니다.
다음은 전체 코드입니다 -
예시
const isHarshad = (num) => { let sum = 0, temp = num; while(temp){ sum += temp % 10; temp = Math.floor(temp/10); } return num % sum === 0; } const harshadNum = (number) => { //if the input is not harshad return -1 if(!isHarshad(number)){ return -1; } let streak = 1, prev = number-1, next = number+1; //check preceding streak while(isHarshad(prev) && prev > 0){ streak++; prev--; } //check succeeding streak while(isHarshad(next)){ streak++; next++; } return streak; }; console.log(harshadNum(1014));
출력
콘솔에서 이 코드의 출력은 -
입니다.4