 GeeksforGeeks App
Open App Browser
Continue

# Given a number N in decimal base, find the sum of digits in any base B

Given a number N in decimal base, the task is to find the sum of digits of the number in any base B
Examples:

Input: N = 100, B = 8
Output:
Explanation:
(100)8 = 144
Sum(144) = 1 + 4 + 4 = 9

Input: N = 50, B = 2
Output:
Explanation:
(50)2 = 110010
Sum(110010) = 1 + 1 + 0 + 0 + 1 + 0 = 3

Approach: Find unit digit by performing modulo operation on number N by base B and updating the number again by N = N / B and update sum by adding the unit digit at each step.

Below is the implementation of above approach

## C++

 `// C++ Implementation to Compute Sum of``// Digits of Number N in Base B` `#include ``using` `namespace` `std;` `// Function to compute sum of``// Digits of Number N in base B``int` `sumOfDigit(``int` `n, ``int` `b)``{``    ` `    ``// Initialize sum with 0``    ``int` `unitDigit, sum = 0;``    ``while` `(n > 0) {``        ` `        ``// Compute unit digit of the number``        ``unitDigit = n % b;` `        ``// Add unit digit in sum``        ``sum += unitDigit;` `        ``// Update value of Number``        ``n = n / b;``    ``}``    ``return` `sum;``}` `// Driver function``int` `main()``{``    ``int` `n = 50;``    ``int` `b = 2;``    ``cout << sumOfDigit(n, b);``    ``return` `0;``}`

## Java

 `// Java Implementation to Compute Sum of``// Digits of Number N in Base B``import` `java.io.*;``public` `class` `GFG``{` `// Function to compute sum of``// Digits of Number N in base B``static` `int` `sumOfDigit(``int` `n, ``int` `b)``{``    ` `    ``// Initialize sum with 0``    ``int` `unitDigit, sum = ``0``;``    ``while` `(n > ``0``)``    ``{``        ` `        ``// Compute unit digit of the number``        ``unitDigit = n % b;` `        ``// Add unit digit in sum``        ``sum += unitDigit;` `        ``// Update value of Number``        ``n = n / b;``    ``}``    ``return` `sum;``}` `// Driver code``public` `static` `void` `main(String[] args)``{``    ``int` `n = ``50``;``    ``int` `b = ``2``;``    ``System.out.print(sumOfDigit(n, b));``}``}` `// This code is contributed by PrinciRaj1992`

## Python3

 `# Python3 Implementation to Compute Sum of``# Digits of Number N in Base B` `# Function to compute sum of``# Digits of Number N in base B``def` `sumOfDigit(n, b):` `    ``# Initialize sum with 0``    ``unitDigit ``=` `0``    ``sum` `=` `0``    ``while` `(n > ``0``):``        ` `        ``# Compute unit digit of the number``        ``unitDigit ``=` `n ``%` `b` `        ``# Add unit digit in sum``        ``sum` `+``=` `unitDigit` `        ``# Update value of Number``        ``n ``=` `n ``/``/` `b` `    ``return` `sum` `# Driver code``n ``=` `50``b ``=` `2``print``(sumOfDigit(n, b))` `# This code is contributed by ApurvaRaj`

## C#

 `// C# Implementation to Compute Sum of``// Digits of Number N in Base B``using` `System;` `class` `GFG``{` `// Function to compute sum of``// Digits of Number N in base B``static` `int` `sumOfDigit(``int` `n, ``int` `b)``{``    ` `    ``// Initialize sum with 0``    ``int` `unitDigit, sum = 0;``    ``while` `(n > 0)``    ``{``        ` `        ``// Compute unit digit of the number``        ``unitDigit = n % b;` `        ``// Add unit digit in sum``        ``sum += unitDigit;` `        ``// Update value of Number``        ``n = n / b;``    ``}``    ``return` `sum;``}` `// Driver code``public` `static` `void` `Main(String[] args)``{``    ``int` `n = 50;``    ``int` `b = 2;``    ``Console.Write(sumOfDigit(n, b));``}``}` `// This code is contributed by PrinciRaj1992`

## Javascript

 ``

Output

`3`

Time Complexity: O(logbN), where N is the given number
Auxiliary Space: O(1)

Approach 2: Using Recursion:

In this approach, we define a function sumOfDigit that takes two arguments – the number n and the base b. The function first checks for the base case, which is when the number becomes 0, and returns 0. Otherwise, the function computes the sum of the unit digit (i.e., the remainder when n is divided by b) and the sum of digits of the quotient (i.e., n divided by b) recursively.

This approach is also efficient and readable, and can handle large numbers without the risk of overflow.

Here is the code  of above approach:

## C++

 `#include ``using` `namespace` `std;` `// Function to compute sum of digits of number n in base b``int` `sumOfDigit(``int` `n, ``int` `b) {``    ``// Base case``    ``if` `(n == 0) {``        ``return` `0;``    ``}` `    ``// Recursive step``    ``return` `(n % b) + sumOfDigit(n / b, b);``}` `// Driver function``int` `main() {``    ``int` `n = 50;``    ``int` `b = 2;``    ``cout << sumOfDigit(n, b) << endl;``    ``return` `0;``}`

## Java

 `/*package whatever //do not write package name here */` `public` `class` `SumOfDigits {``    ``// Function to compute sum of digits of number n in base b``    ``public` `static` `int` `sumOfDigit(``int` `n, ``int` `b) {``        ``// Base case``        ``if` `(n == ``0``) {``            ``return` `0``;``        ``}` `        ``// Recursive step``        ``return` `(n % b) + sumOfDigit(n / b, b);``    ``}` `    ``// Driver function``    ``public` `static` `void` `main(String[] args) {``        ``int` `n = ``50``;``        ``int` `b = ``2``;``        ``System.out.println(sumOfDigit(n, b));``    ``}``}`

## Python3

 `def` `sum_of_digit(n, b):``    ``# Base case``    ``if` `n ``=``=` `0``:``        ``return` `0``    ` `    ``# Recursive step``    ``return` `(n ``%` `b) ``+` `sum_of_digit(n ``/``/` `b, b)` `# Driver function``if` `__name__ ``=``=` `'__main__'``:``    ``n ``=` `50``    ``b ``=` `2``    ``print``(sum_of_digit(n, b))`

## C#

 `using` `System;` `public` `class` `SumOfDigits``{``  ``// Function to compute sum of digits of number n in base b``  ``public` `static` `int` `SumOfDigit(``int` `n, ``int` `b)``  ``{``    ``// Base case``    ``if` `(n == 0)``    ``{``      ``return` `0;``    ``}` `    ``// Recursive step``    ``return` `(n % b) + SumOfDigit(n / b, b);``  ``}` `  ``// Driver function``  ``public` `static` `void` `Main(``string``[] args)``  ``{``    ``int` `n = 50;``    ``int` `b = 2;``    ``System.Console.WriteLine(SumOfDigit(n, b));``  ``}``}`

## Javascript

 `// JavaScript program for the above approach.` `function` `sum_of_digit(n, b) {``// Base case``if` `(n == 0) {``return` `0;``}` `// Recursive step``return` `(n % b) + sum_of_digit(Math.floor(n / b), b);``}` `// Driver function``let n = 50;``let b = 2;``console.log(sum_of_digit(n, b));` `// Contributed by adityasharmadev01`

Output

`3`

Time Complexity: O(logbN), where N is the given number
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up