File tree Expand file tree Collapse file tree 2 files changed +55
-0
lines changed
Expand file tree Collapse file tree 2 files changed +55
-0
lines changed Original file line number Diff line number Diff line change 1+ /**
2+ * Wikipedia: https://en.wikipedia.org/wiki/Harshad_number
3+ * A Harshad number (or Niven number) is a positive integer that is divisible by the sum of its own digits.
4+ *
5+ * The function checks if a number is a Harshad (Niven) number.
6+ * @param {any } n - The number to check
7+ * @returns {boolean } - true if Harshad, false otherwise
8+ * @example isHarshad(2025) // true
9+ */
10+ export const isHarshad = ( n ) => {
11+ const num = Number ( n )
12+
13+ if ( num <= 0 || ! Number . isInteger ( num ) ) return false
14+
15+ let sum = 0 ,
16+ temp = n
17+
18+ while ( temp > 0 ) {
19+ sum += temp % 10
20+ temp = Math . floor ( temp / 10 )
21+ }
22+
23+ return n % sum === 0
24+ }
Original file line number Diff line number Diff line change 1+ import { isHarshad } from '../isHarshad.js'
2+
3+ describe ( 'Harshad number tests' , ( ) => {
4+ test ( 'Basic Harshad numbers' , ( ) => {
5+ expect ( isHarshad ( 18 ) ) . toBe ( true )
6+ expect ( isHarshad ( 21 ) ) . toBe ( true )
7+ expect ( isHarshad ( 12 ) ) . toBe ( true )
8+ expect ( isHarshad ( 6804 ) ) . toBe ( true )
9+ expect ( isHarshad ( '18' ) ) . toBe ( true )
10+ expect ( isHarshad ( 2025 ) ) . toBe ( true )
11+ } )
12+
13+ test ( 'Non-Harshad numbers' , ( ) => {
14+ expect ( isHarshad ( 19 ) ) . toBe ( false )
15+ expect ( isHarshad ( 25 ) ) . toBe ( false )
16+ expect ( isHarshad ( 97 ) ) . toBe ( false )
17+ } )
18+
19+ test ( 'Edge cases' , ( ) => {
20+ expect ( isHarshad ( 0 ) ) . toBe ( false )
21+ expect ( isHarshad ( - 18 ) ) . toBe ( false )
22+ expect ( isHarshad ( 1 ) ) . toBe ( true )
23+ expect ( isHarshad ( 10 ) ) . toBe ( true )
24+ } )
25+
26+ test ( 'Input validation' , ( ) => {
27+ expect ( isHarshad ( 18.5 ) ) . toBe ( false )
28+ expect ( isHarshad ( null ) ) . toBe ( false )
29+ expect ( isHarshad ( undefined ) ) . toBe ( false )
30+ } )
31+ } )
You can’t perform that action at this time.
0 commit comments