Skip to content

3099. Harshad Number

Description

An integer divisible by the sum of its digits is said to be a Harshad number. You are given an integer x. Return the sum of the digits of x if x is a Harshad number, otherwise, return -1.

 

Example 1:

Input: x = 18

Output: 9

Explanation:

The sum of digits of x is 9. 18 is divisible by 9. So 18 is a Harshad number and the answer is 9.

Example 2:

Input: x = 23

Output: -1

Explanation:

The sum of digits of x is 5. 23 is not divisible by 5. So 23 is not a Harshad number and the answer is -1.

 

Constraints:

  • 1 <= x <= 100

Solutions

Solution 1: Simulation

We can calculate the sum of the digits of \(x\), denoted as \(s\), by simulation. If \(x\) can be divided evenly by \(s\), then we return \(s\), otherwise, we return \(-1\).

The time complexity is \(O(\log x)\), where \(x\) is the input integer. The space complexity is \(O(1)\).

1
2
3
4
5
6
7
class Solution:
    def sumOfTheDigitsOfHarshadNumber(self, x: int) -> int:
        s, y = 0, x
        while y:
            s += y % 10
            y //= 10
        return s if x % s == 0 else -1
1
2
3
4
5
6
7
8
9
class Solution {
    public int sumOfTheDigitsOfHarshadNumber(int x) {
        int s = 0;
        for (int y = x; y > 0; y /= 10) {
            s += y % 10;
        }
        return x % s == 0 ? s : -1;
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
class Solution {
public:
    int sumOfTheDigitsOfHarshadNumber(int x) {
        int s = 0;
        for (int y = x; y > 0; y /= 10) {
            s += y % 10;
        }
        return x % s == 0 ? s : -1;
    }
};
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
func sumOfTheDigitsOfHarshadNumber(x int) int {
    s := 0
    for y := x; y > 0; y /= 10 {
        s += y % 10
    }
    if x%s == 0 {
        return s
    }
    return -1
}
1
2
3
4
5
6
7
function sumOfTheDigitsOfHarshadNumber(x: number): number {
    let s = 0;
    for (let y = x; y; y = Math.floor(y / 10)) {
        s += y % 10;
    }
    return x % s === 0 ? s : -1;
}

Comments