# Complement of a number with any base b

In this post, a general method of finding complement with any arbitrary base is discussed.

Remember: It is recommended to go through below as follows:

Steps to find (b-1)â€™s complement: To find (b-1)â€™s complement,

• Subtract each digit of the number from the largest number in the number system with base .
• For example, if the number is a three-digit number in base 9, then subtract the number from 888 as 8 is the largest number in base 9 number system.
• The obtained result is the (b-1)â€™s (8’s complement) complement.

Steps to find bâ€™s complement: To find bâ€™s complement, just add 1 to the calculated (b-1)â€™s complement. Now, this holds true for any base in the number system that exists. It can be tested with familiar bases that is the 1’s and 2’s complement.

Example

```Let the number be 10111 base 2 (b=2)
Then, 1's complement will be 01000 (b-1)
2's complement will be 01001 (b)

Taking a number with Octal base:
Let the number be -456.
Then 7's complement will be 321
and 8's complement will be 322```

Below is the implementation of the above idea as follows:

## C++

 `// CPP program to find complement of a` `// number with any base b`   `#include ` `#include `   `using` `namespace` `std;`   `// Function to find (b-1)'s complement` `int` `prevComplement(``int` `n, ``int` `b)` `{` `    ``int` `maxDigit, maxNum = 0, digits = 0, num = n;`   `    ``// Calculate number of digits` `    ``// in the given number` `    ``while` `(n != 0) {` `        ``digits++;` `        ``n = n / 10;` `    ``}`   `    ``// Largest digit in the number` `    ``// system with base b` `    ``maxDigit = b - 1;`   `    ``// Largest number in the number` `    ``// system with base b` `    ``while` `(digits--) {` `        ``maxNum = maxNum * 10 + maxDigit;` `    ``}`   `    ``// return Complement` `    ``return` `maxNum - num;` `}`   `// Function to find b's complement` `int` `complement(``int` `n, ``int` `b)` `{` `    ``// b's complement = (b-1)'s complement + 1` `    ``return` `prevComplement(n, b) + 1;` `}`   `// Driver code` `int` `main()` `{` `    ``cout << prevComplement(25, 7) << endl;`   `    ``cout << complement(25, 7);`   `    ``return` `0;` `}`

## Java

 `// Java program to find complement ` `// of a number with any base b` `class` `GFG` `{`   `// Function to find (b-1)'s complement` `static` `int` `prevComplement(``int` `n, ``int` `b)` `{` `    ``int` `maxDigit, maxNum = ``0``, ` `        ``digits = ``0``, num = n;` `    `  `    ``// Calculate number of digits ` `    ``// in the given number` `    ``while``(n != ``0``)` `    ``{` `        ``digits++;` `        ``n = n / ``10``;` `    ``}` `    `  `    ``// Largest digit in the number` `    ``// system with base b` `    ``maxDigit = b - ``1``;` `    `  `    ``// Largest number in the number` `    ``// system with base b` `    ``while``((digits--) > ``0``)` `    ``{` `        ``maxNum = maxNum * ``10` `+ maxDigit;` `    ``}` `    `  `    ``// return Complement` `    ``return` `maxNum - num;` `}`   `// Function to find b's complement` `static` `int` `complement(``int` `n, ``int` `b)` `{ ` `    ``// b's complement = (b-1)'s` `    ``// complement + 1` `    ``return` `prevComplement(n, b) + ``1``;` `}`   `// Driver code` `public` `static` `void` `main(String args[])` `{` `    ``System.out.println(prevComplement(``25``, ``7``));` `    `  `    ``System.out.println(complement(``25``, ``7``));` `}` `}`   `// This code is contributed` `// by Kirti_Mangal`

## Python 3

 `# Python 3 program to find ` `# complement of a number` `# with any base b`   `# Function to find ` `# (b-1)'s complement ` `def` `prevComplement(n, b) :` `    ``maxNum, digits, num ``=` `0``, ``0``, n`   `    ``# Calculate number of digits ` `    ``# in the given number ` `    ``while` `n > ``1` `:` `        ``digits ``+``=` `1` `        ``n ``=` `n ``/``/` `10`   `    ``# Largest digit in the number ` `    ``# system with base b ` `    ``maxDigit ``=` `b ``-` `1`   `    ``# Largest number in the number ` `    ``# system with base b ` `    ``while` `digits :` `        ``maxNum ``=` `maxNum ``*` `10` `+` `maxDigit` `        ``digits ``-``=` `1` `        `  `    ``# return Complement ` `    ``return` `maxNum ``-` `num`   `# Function to find b's complement` `def` `complement(n, b) :`   `    ``# b's complement = (b-1)'s` `    ``# complement + 1 ` `    ``return` `prevComplement(n, b) ``+` `1`   `# Driver code` `if` `__name__ ``=``=` `"__main__"` `:` `    `  `    ``# Function calling` `    ``print``(prevComplement(``25``, ``7``))` `    ``print``(complement(``25``, ``7``))`   `# This code is contributed ` `# by ANKITRAI1`

## C#

 `// C# program to find complement ` `// of a number with any base b` `class` `GFG` `{`   `// Function to find (b-1)'s complement` `static` `int` `prevComplement(``int` `n, ``int` `b)` `{` `    ``int` `maxDigit, maxNum = 0, ` `        ``digits = 0, num = n;` `    `  `    ``// Calculate number of digits ` `    ``// in the given number` `    ``while``(n != 0)` `    ``{` `        ``digits++;` `        ``n = n / 10;` `    ``}` `    `  `    ``// Largest digit in the number` `    ``// system with base b` `    ``maxDigit = b - 1;` `    `  `    ``// Largest number in the number` `    ``// system with base b` `    ``while``((digits--) > 0)` `    ``{` `        ``maxNum = maxNum * 10 + maxDigit;` `    ``}` `    `  `    ``// return Complement` `    ``return` `maxNum - num;` `}`   `// Function to find b's complement` `static` `int` `complement(``int` `n, ``int` `b)` `{ ` `    ``// b's complement = (b-1)'s` `    ``// complement + 1` `    ``return` `prevComplement(n, b) + 1;` `}`   `// Driver code` `public` `static` `void` `Main()` `{` `    ``System.Console.WriteLine(prevComplement(25, 7));` `    `  `    ``System.Console.WriteLine(complement(25, 7));` `}` `}`   `// This code is contributed` `// by mits`

## PHP

 ``

## Javascript

 ``

Output:

```41
42```

Time Complexity: O(log n)

Auxiliary Space: O(1)

Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!

Previous
Next