Given an integer n
(in base 10
) and a base k
, return the sum of the digits of n
after converting n
from base 10
to base k
.
After converting, each digit should be interpreted as a base 10
number, and the sum should be returned in base 10
.
Example 1:
Input: n = 34, k = 6 Output: 9 Explanation: 34 (base 10) expressed in base 6 is 54. 5 + 4 = 9.
Example 2:
Input: n = 10, k = 10 Output: 1 Explanation: n is already in base 10. 1 + 0 = 1.
Constraints:
1 <= n <= 100
2 <= k <= 10
Given an integer n
(in base 10) and a base k
, the task is to find the sum of the digits of n
after converting it from base 10 to base k
. The sum should be returned in base 10.
The core idea is to repeatedly divide the input number n
by the base k
and sum the remainders. Each remainder represents a digit in the base k
representation of n
.
Initialization: Start with a sum ans
initialized to 0.
Iteration: While n
is greater than 0:
n
is divided by k
(n % k
). This remainder is a digit in the base k
representation.ans
.n
by integer division with k
(n // k
). This effectively removes the last digit in base k
.Return: After the loop finishes, ans
will hold the sum of the digits in base k
. Return ans
.
The solution is straightforward and can be implemented efficiently in various programming languages. The following examples demonstrate the code in several popular languages:
Python:
class Solution:
def sumBase(self, n: int, k: int) -> int:
ans = 0
while n:
ans += n % k
n //= k
return ans
Java:
class Solution {
public int sumBase(int n, int k) {
int ans = 0;
while (n != 0) {
ans += n % k;
n /= k;
}
return ans;
}
}
C++:
class Solution {
public:
int sumBase(int n, int k) {
int ans = 0;
while (n) {
ans += n % k;
n /= k;
}
return ans;
}
};
JavaScript:
var sumBase = function(n, k) {
let ans = 0;
while (n > 0) {
ans += n % k;
n = Math.floor(n / k);
}
return ans;
};
Go:
func sumBase(n int, k int) int {
ans := 0
for n > 0 {
ans += n % k
n /= k
}
return ans
}
TypeScript:
function sumBase(n: number, k: number): number {
let ans = 0;
while (n > 0) {
ans += n % k;
n = Math.floor(n / k);
}
return ans;
}
Time Complexity: The time complexity is O(logkn). This is because the number of iterations in the while
loop is proportional to the number of digits in the base k
representation of n
, which is approximately logkn.
Space Complexity: The space complexity is O(1) because we only use a constant amount of extra space to store the variables ans
and potentially intermediate calculation results. The space used does not depend on the input size n
.