【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/--------------------------