Given an integer A, the task is to find the maximum value possible(B) which is less than A, such that xor of these two numbers A and B are equal to their sum, that is A ^ B = A + B.
Examples:
Input: A = 4
Output: 3
Explanation:
There are many such integers, such that A ^ B = A + B
Some of these integers are –
4 ^ 3 = 4 + 3 = 7
4 ^ 2 = 4 + 2 = 6
4 ^ 1 = 4 + 1 = 5
4 ^ 0 = 4 + 0 = 4
The maximum of these values is 3Input: 7
Output: 0
There is no integer except 0 such that A + B = A ^ B
Approach: The idea is to use the fact that
and to get the value of , the value of (A & B) must be equal to 0.
=> A & B = 0 => B = ~A
For Example:
A = 4 (1 0 0) B = ~ A = (0 1 1) = 3
Below is the implementation of the above approach:
C++
// C++ implementation to find // maximum value of B such that // A ^ B = A + B #include <bits/stdc++.h> using namespace std; // Function to find the maximum // value of B such that A^B = A+B void maxValue( int a) { // Binary Representation of A string c = bitset<3>(a).to_string(); string b = "" ; // Loop to find the negation // of the integer A for ( int i = 0; i < c.length(); i++) { if ((c[i] - '0' ) == 1) b += '0' ; else b += '1' ; } // Output cout << bitset<3>(b).to_ulong(); } // Driver code int main() { int a = 4; // Function Call maxValue(a); return 0; } // This code is contributed by divyeshrabadiya07 |
Java
// Java implementation to find // maximum value of B such that // A ^ B = A + B // Function to find the maximum // value of B such that A^B = A+B class GFG { static void maxValue( int a) { // Binary Representation of A String c = Integer.toBinaryString(a); String b = "" ; // Loop to find the negation // of the integer A for ( int i = 0 ; i < c.length(); i++) { if ((c.charAt(i)- '0' )== 1 ) b += '0' ; else b+= '1' ; } // output System.out.print(Integer.parseInt(b, 2 )); } // Driver Code public static void main(String []args) { int a = 4 ; // Function Call maxValue(a); } } // This code is contributed by chitranayal |
Python3
# Python3 implementation to find # maximum value of B such that # A ^ B = A + B # Function to find the maximum # value of B such that A^B = A+B def maxValue(a): # Binary Representation of A a = bin (a)[ 2 :] b = '' # Loop to find the negation # of the integer A for i in list (a): b + = str ( int ( not int (i))) # output print ( int (b, 2 )) return int (b, 2 ) # Driver Code if __name__ = = '__main__' : a = 4 # Function Call maxValue(a) |
C#
// C# implementation to find // maximum value of B such that // A ^ B = A + B // Function to find the maximum // value of B such that A^B = A+B using System; using System.Collections.Generic; class GFG { static void maxValue( int a) { // Binary Representation of A String c = Convert.ToString(a, 2); String b = "" ; // Loop to find the negation // of the integer A for ( int i = 0; i < c.Length; i++) { if ((c[i] - '0' ) == 1) b += '0' ; else b += '1' ; } // output Console.Write(Convert.ToInt32(b, 2)); } // Driver Code public static void Main(String []args) { int a = 4; // Function Call maxValue(a); } } // This code is contributed by 29AjayKumar |
Javascript
<script> // Javascript implementation to find // maximum value of B such that // A ^ B = A + B // Function to find the maximum // value of B such that A^B = A+B function maxValue(a) { // Binary Representation of A var c = a.toString(2); var b = "" ; // Loop to find the negation // of the integer A for ( var i = 0; i < c.length; i++) { if ((c[i] - '0' ) == 1) b += '0' ; else b += '1' ; } // Output document.write(parseInt(b,2)); } // Driver code var a = 4; // Function Call maxValue(a); </script> |
3
Performance Analysis:
- Time Complexity: In the above-given approach, there is the conversion from decimal to binary which takes O(logN) time in the worst case. Therefore, the time complexity for this approach will be O(logN).
- Auxiliary Space Complexity: In the above-given approach, there is no extra space used. Therefore, the auxiliary space complexity for the above approach will be O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!