跳转至

3099. 哈沙德数

题目描述

如果一个整数能够被其各个数位上的数字之和整除,则称之为 哈沙德数(Harshad number)。给你一个整数 x 。如果 x哈沙德数 ,则返回 x 各个数位上的数字之和,否则,返回 -1

 

示例 1:

输入: x = 18

输出: 9

解释:

x 各个数位上的数字之和为 918 能被 9 整除。因此 18 是哈沙德数,答案是 9

示例 2:

输入: x = 23

输出: -1

解释:

x 各个数位上的数字之和为 523 不能被 5 整除。因此 23 不是哈沙德数,答案是 -1

 

提示:

  • 1 <= x <= 100

解法

方法一:模拟

我们可以通过模拟的方法,计算出 $x$ 的各个数位上的数字之和,记为 $s$。如果 $x$ 能被 $s$ 整除,则返回 $s$,否则返回 $-1$。

时间复杂度 $O(\log x)$,其中 $x$ 是输入的整数。空间复杂度 $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;
}

评论