🔗 🟢 3099. Harshad Number 1101

tags: Weekly Contest 391 數學(Math)

題意

如果一個整數能夠被其各位數字之和整除,則稱之為 哈沙德數(Harshad number)

給定一個整數 xx 。如果 xx哈沙德數(Harshad number) ,則返回 xx 各位數字之和,否則返回 1-1

約束條件

  • 1x1001 \leq x \leq 100

思路:數學(Math)

ssxx 各位數字之和,tmptmpxx 的備份。

根據題意,首先需要計算整數 xx 各位數字的和 ss ,這可以通過反覆對 tmptmp 取模 1010 並累加得到。

然後檢查 xx 是否能夠被 ss 整除。如果是,則返回 ss ,否則返回 1-1

複雜度分析

  • 時間複雜度:O(log10x)\mathcal{O}(\log_{10}x) ,總共需要對 xx 取模 log10xlog_{10}x 次。
  • 空間複雜度:O(1)\mathcal{O}(1) ,只需要常數空間。
1
2
3
4
5
6
7
class Solution:
def sumOfTheDigitsOfHarshadNumber(self, x: int) -> int:
s, tmp = 0, x
while tmp:
tmp, r = divmod(tmp, 10)
s += r
return s if x % s == 0 else -1
1
2
3
4
5
6
7
8
9
10
11
class Solution {
public:
int sumOfTheDigitsOfHarshadNumber(int x) {
int s = 0, tmp = x;
while (tmp) {
s += tmp % 10;
tmp /= 10;
}
return x % s == 0? s : -1;
}
};

寫在最後

Cover photo is remixed from @吃肥皂泡泡, thanks for their work!