Open In App

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, 

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:  

// 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 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 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# 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 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
?>

                    
<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)


Article Tags :