【LetMeFly】3099.哈沙德数:计算一个数十进制下各位之和
力扣题目链接:https://leetcode.cn/problems/harshad-number/
如果一个整数能够被其各个数位上的数字之和整除,则称之为 哈沙德数(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
解题方法:计算
如何“计算一个正整数十进制下各位之和”?
当这个数不为零时,不断取出这个数的最后一位( n % 10 n \% 10 n%10)。
取出最后一位后讲这个数除以 10 10 10。
将所有取出的“最后一位”累加后,即为所求。
给定一个正整数 x x x,首先计算 x x x十进制下每一位之和 s u m sum sum。
- 若 x % s u m = = 0 x\% sum==0 x%sum==0,则返回 s u m sum sum;
- 否则,返回 − 1 -1 −1。
- 时间复杂度 O ( log x ) O(\log x) O(logx)
- 空间复杂度 O ( 1 ) O(1) O(1)
AC代码
C++
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
package mainfunc getSum(n int) int {ans := 0for n > 0 {ans += n % 10n /= 10}return ans
}func sumOfTheDigitsOfHarshadNumber(x int) int {sum := getSum(x)if x%sum == 0 {return sum}return -1
}
Java
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
class Solution:def getSum(self, n: int) -> int:ans = 0while n:ans += n % 10n //= 10return ansdef 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
class Solution:def getSum(self, n: int) -> int:ans = 0while n:ans += n % 10n //= 10return ansdef 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/--------------------------