Welcome to Subscribe On Youtube
3622. Check Divisibility by Digit Sum and Product
Description
You are given a positive integer n
. Determine whether n
is divisible by the sum of the following two values:
-
The digit sum of
n
(the sum of its digits). -
The digit product of
n
(the product of its digits).
Return true
if n
is divisible by this sum; otherwise, return false
.
Example 1:
Input: n = 99
Output: true
Explanation:
Since 99 is divisible by the sum (9 + 9 = 18) plus product (9 * 9 = 81) of its digits (total 99), the output is true.
Example 2:
Input: n = 23
Output: false
Explanation:
Since 23 is not divisible by the sum (2 + 3 = 5) plus product (2 * 3 = 6) of its digits (total 11), the output is false.
Constraints:
1 <= n <= 106
Solutions
Solution 1: Simulation
We can iterate through each digit of the integer $n$, calculating the digit sum $s$ and digit product $p$. Finally, we check whether $n$ is divisible by $s + p$.
The time complexity is $O(\log n)$, where $n$ is the value of the integer $n$. The space complexity is $O(1)$.
-
class Solution { public boolean checkDivisibility(int n) { int s = 0, p = 1; int x = n; while (x != 0) { int v = x % 10; x /= 10; s += v; p *= v; } return n % (s + p) == 0; } }
-
class Solution { public: bool checkDivisibility(int n) { int s = 0, p = 1; int x = n; while (x != 0) { int v = x % 10; x /= 10; s += v; p *= v; } return n % (s + p) == 0; } };
-
class Solution: def checkDivisibility(self, n: int) -> bool: s, p = 0, 1 x = n while x: x, v = divmod(x, 10) s += v p *= v return n % (s + p) == 0
-
func checkDivisibility(n int) bool { s, p := 0, 1 x := n for x != 0 { v := x % 10 x /= 10 s += v p *= v } return n%(s+p) == 0 }
-
function checkDivisibility(n: number): boolean { let [s, p] = [0, 1]; let x = n; while (x !== 0) { const v = x % 10; x = Math.floor(x / 10); s += v; p *= v; } return n % (s + p) === 0; }