3622 - Check Divisibility by Digit Sum and Product
problem
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
submission
impl Solution {
pub fn check_divisibility(n: i32) -> bool {
let mut num = n;
// calculate both sum and product in one fold
let (sum, prod) = std::iter::from_fn(|| {
(num > 0).then(|| {
let digit = num % 10;
num /= 10;
digit
})
})
.fold((0, 1), |(sum, prod), val| (sum + val, prod * val));
n % (sum + prod) == 0
}
}