In this post, a general method of finding complement with any arbitrary base
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:
// 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)