Open In App
Related Articles

Complement of a number with any base b

Improve Article
Improve
Save Article
Save
Like Article
Like

In this post, a general method of finding complement with any arbitrary base b      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 b      .
  • 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 <cmath>
#include <iostream>
 
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




<?php
// PHP program to find complement
// of a number with any base b
 
// Function to find (b-1)'s complement
function prevComplement($n, $b)
{
    $maxNum = 0;
    $digits = 0;
    $num = $n;
     
    // Calculate number of digits
    // in the given number
    while((int)$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
function complement($n, $b)
{
    // b's complement = (b-1)'s
    // complement + 1
    return prevComplement($n, $b) + 1;
}
 
// Driver code
echo prevComplement(25, 7), "\n";
     
echo(complement(25, 7));
 
// This code is contributed
// by Smitha
?>


Javascript




<script>
 
// Javascript program to find complement
// of a number with any base b
 
// Function to find (b-1)'s complement
    function prevComplement(n , b) {
        var maxDigit, maxNum = 0, digits = 0,
        num = n;
 
        // Calculate number of digits
        // in the given number
        while (n != 0) {
            digits++;
            n = parseInt(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
    function complement(n , b) {
        // b's complement = (b-1)'s
        // complement + 1
        return prevComplement(n, b) + 1;
    }
 
    // Driver code
     
        document.write(prevComplement(25, 7)+"<br/>");
 
        document.write(complement(25, 7));
 
// This code is contributed by todaysgaurav
 
</script>


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!

Last Updated : 01 Sep, 2022
Like Article
Save Article
Previous
Next
Similar Reads
Complete Tutorials