3099.哈沙德数

【LetMeFly】3099.哈沙德数:计算一个数十进制下各位之和

力扣题目链接:https://leetcode.cn/problems/harshad-number/

如果一个整数能够被其各个数位上的数字之和整除,则称之为 哈沙德数(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

解题方法:计算

如何“计算一个正整数十进制下各位之和”?

当这个数不为零时,不断取出这个数的最后一位($n % 10$)。

取出最后一位后讲这个数除以$10$。

将所有取出的“最后一位”累加后,即为所求。

给定一个正整数$x$,首先计算$x$十进制下每一位之和$sum$。

  • 若$x% sum==0$,则返回$sum$;
  • 否则,返回$-1$。
  • 时间复杂度$O(\log x)$
  • 空间复杂度$O(1)$

AC代码

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
private:
inline int getSum(int n) {
int ans = 0;
while (n) {
ans += n % 10;
n /= 10;
}
return ans;
}
public:
int sumOfTheDigitsOfHarshadNumber(int x) {
int sum = getSum(x);
return x % sum == 0 ? sum : -1;
}
};

Go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package main

func getSum(n int) int {
ans := 0
for n > 0 {
ans += n % 10
n /= 10
}
return ans
}

func sumOfTheDigitsOfHarshadNumber(x int) int {
sum := getSum(x)
if x%sum == 0 {
return sum
}
return -1
}

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
private int getSum(int n) {
int ans = 0;
while (n != 0) {
ans += n % 10;
n /= 10;
}
return ans;
}
public int sumOfTheDigitsOfHarshadNumber(int x) {
int sum = getSum(x);
return x % sum == 0 ? sum : -1;
}
}

Python

1
2
3
4
5
6
7
8
9
10
class Solution:
def getSum(self, n: int) -> int:
ans = 0
while n:
ans += n % 10
n //= 10
return ans
def sumOfTheDigitsOfHarshadNumber(self, x: int) -> int:
sum = self.getSum(x)
return sum if x % sum == 0 else -1

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

Tisfy:https://letmefly.blog.csdn.net/article/details/140160763


3099.哈沙德数
https://blog.letmefly.xyz/2024/07/03/LeetCode 3099.哈沙德数/
作者
Tisfy
发布于
2024年7月3日
许可协议