3099. 哈沙德数
题目描述
如果一个整数能够被其各个数位上的数字之和整除,则称之为 哈沙德数(Harshad number)。给你一个整数 x
。如果 x
是 哈沙德数 ,则返回 x
各个数位上的数字之和,否则,返回 -1
。
示例 1:
输入: x = 18
输出: 9
解释:
x
各个数位上的数字之和为 9
。18
能被 9
整除。因此 18
是哈沙德数,答案是 9
。
示例 2:
输入: x = 23
输出: -1
解释:
x
各个数位上的数字之和为 5
。23
不能被 5
整除。因此 23
不是哈沙德数,答案是 -1
。
提示:
1 <= x <= 100
解法
方法一:模拟
我们可以通过模拟的方法,计算出 $x$ 的各个数位上的数字之和,记为 $s$。如果 $x$ 能被 $s$ 整除,则返回 $s$,否则返回 $-1$。
时间复杂度 $O(\log x)$,其中 $x$ 是输入的整数。空间复杂度 $O(1)$。
Python3
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
Java
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;
}
}
C++
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;
}
};
Go
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
}
TypeScript
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;
}