Open In App

Complement of a number with any base b

Improve
Improve
Like Article
Like
Save
Share
Report

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)



Last Updated : 01 Sep, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads