 Open in App
Not now

# Check if binary representation of a number is palindrome

• Difficulty Level : Easy
• Last Updated : 02 Feb, 2023

Given an integer ‘x’, write a C function that returns true if binary representation of x is palindrome else return false.
For example a numbers with binary representation as 10..01 is palindrome and number with binary representation as 10..00 is not palindrome.
The idea is similar to checking a string is palindrome or not. We start from leftmost and rightmost bits and compare bits one by one. If we find a mismatch, then return false.

#### Method#1:  We follow the following logic to check binary of number is Palindrome or not:

• Find number of bits in x using sizeof() operator.
• Initialize left and right positions as 1 and n respectively.
• Do following while left ‘l’ is smaller than right ‘r’.
• If bit at position ‘l’ is not same as bit at position ‘r’, then return false.
• Increment ‘l’ and decrement ‘r’, i.e., do l++ and r–-.
•  If we reach here, it means we didn’t find a mismatching bit.
• To find the bit at a given position, we can use an idea similar to this post. The expression “x & (1 << (k-1))” gives us non-zero value if bit at k’th position from right is set and gives a zero value if if k’th bit is not set.

Following is the implementation of the above algorithm

## C++

 `// C++ Program to Check if binary representation ` `// of a number is palindrome ` `#include ` `using` `namespace` `std; `   `// This function returns true if k'th bit in x ` `// is set (or 1). For example if x (0010) is 2 ` `// and k is 2, then it returns true ` `bool` `isKthBitSet(unsigned ``int` `x, unsigned ``int` `k) ` `{ ` `    ``return` `(x & (1 << (k - 1))) ? ``true` `: ``false``; ` `} `   `// This function returns true if binary ` `// representation of x is palindrome. ` `// For example (1000...001) is palindrome ` `bool` `isPalindrome(unsigned ``int` `x) ` `{ ` `    ``int` `l = 1; ``// Initialize left position ` `    ``int` `r = ``sizeof``(unsigned ``int``) * 8; ``// initialize right position `   `    ``// One by one compare bits ` `    ``while` `(l < r) ` `    ``{ ` `        ``if` `(isKthBitSet(x, l) != isKthBitSet(x, r)) ` `            ``return` `false``; ` `        ``l++; r--; ` `    ``} ` `    ``return` `true``; ` `} `   `// Driver Code ` `int` `main() ` `{ ` `    ``unsigned ``int` `x = 1 << 15 + 1 << 16; ` `    ``cout << isPalindrome(x) << endl; ` `    ``x = 1 << 31 + 1; ` `    ``cout << isPalindrome(x) << endl; ` `    ``return` `0; ` `} `

## Java

 `// Java Program to Check if binary representation ` `// of a number is palindrome ` `class` `GFG ` `{`   `    ``// This function returns true if k'th bit in x ` `    ``// is set (or 1). For example if x (0010) is 2 ` `    ``// and k is 2, then it returns true ` `    ``static` `int` `isKthBitSet(``long` `x, ``long` `k) ` `    ``{ ` `        ``int` `rslt = ((x & (``1` `<< (k - ``1``))) != ``0``) ? ``1` `: ``0``; ` `        ``return` `rslt;` `    ``} ` `    `  `    ``// This function returns true if binary ` `    ``// representation of x is palindrome. ` `    ``// For example (1000...001) is palindrome ` `    ``static` `int` `isPalindrome( ``long` `x) ` `    ``{ ` `        ``long` `l = ``1``; ``// Initialize left position ` `        ``long` `r = (Integer.SIZE/``8` `)* ``8``; ``// initialize right position ` `    `  `        ``// One by one compare bits ` `        ``while` `(l < r) ` `        ``{ ` `            ``if` `(isKthBitSet(x, l) != isKthBitSet(x, r)) ` `            ``{` `                ``return` `0``; ` `            ``}` `            ``l++; r--; ` `        ``} ` `        ``return` `1``; ` `    ``} ` `    `  `    ``// Driver Code ` `    ``public` `static` `void` `main (String[] args)` `    ``{ ` `        ``long` `x = ``1` `<< ``15` `+ ``1` `<< ``16` `; ` `        ``System.out.println(isPalindrome(x)); ` `        `  `        ``x = (``1` `<< ``31``) + ``1` `; ` `        ``System.out.println(isPalindrome(x)); ` `    ``} ` `}`   `// This code is contributed by AnkitRai01`

## Python3

 `# python 3 Program to Check if binary representation` `# of a number is palindrome` `import` `sys` `# This function returns true if k'th bit in x ` `# is set (or 1). For example if x (0010) is 2 ` `# and k is 2, then it returns true` `def` `isKthBitSet(x, k):` `    ``if` `((x & (``1` `<< (k ``-` `1``))) !``=``0``):` `        ``return` `True` `    ``else``:` `        ``return` `False`   `# This function returns true if binary ` `# representation of x is palindrome.` `# For example (1000...001) is palindrome` `def` `isPalindrome(x):` `    ``l ``=` `1` `# Initialize left position` `    ``r ``=` `2` `*` `8` `# initialize right position`   `    ``# One by one compare bits` `    ``while` `(l < r):` `        ``if` `(isKthBitSet(x, l) !``=` `isKthBitSet(x, r)):` `            ``return` `False` `        ``l ``+``=` `1` `        ``r ``-``=` `1` `    `  `    ``return` `True`   `# Driver Code` `if` `__name__ ``=``=``'__main__'``:` `    ``x ``=` `1` `<< ``15` `+` `1` `<< ``16` `    ``print``(``int``(isPalindrome(x)))` `    ``x ``=` `1` `<< ``31` `+` `1` `    ``print``(``int``(isPalindrome(x)))`   `# This code is contributed by` `# Surendra_Gangwar`

## C#

 `// C# Program to Check if binary representation ` `// of a number is palindrome ` `using` `System;`   `class` `GFG ` `{ `   `    ``// This function returns true if k'th bit in x ` `    ``// is set (or 1). For example if x (0010) is 2 ` `    ``// and k is 2, then it returns true ` `    ``static` `int` `isKthBitSet(``long` `x, ``long` `k) ` `    ``{ ` `        ``int` `rslt = ((x & (1 << (``int``)(k - 1))) != 0) ? 1 : 0; ` `        ``return` `rslt; ` `    ``} ` `    `  `    ``// This function returns true if binary ` `    ``// representation of x is palindrome. ` `    ``// For example (1000...001) is palindrome ` `    ``static` `int` `isPalindrome( ``long` `x) ` `    ``{ ` `        ``long` `l = 1; ``// Initialize left position ` `        ``long` `r = 4 * 8; ``// initialize right position ` `    `  `        ``// One by one compare bits ` `        ``while` `(l < r) ` `        ``{ ` `            ``if` `(isKthBitSet(x, l) != isKthBitSet(x, r)) ` `            ``{ ` `                ``return` `0; ` `            ``} ` `            ``l++; r--; ` `        ``} ` `        ``return` `1; ` `    ``} ` `    `  `    ``// Driver Code ` `    ``public` `static` `void` `Main () ` `    ``{ ` `        ``long` `x = 1 << 15 + 1 << 16 ; ` `        ``Console.WriteLine(isPalindrome(x)); ` `        `  `        ``x = (1 << 31) + 1 ; ` `        ``Console.WriteLine(isPalindrome(x)); ` `    ``} ` `} `   `// This code is contributed by AnkitRai01 `

## PHP

 ``

## Javascript

 ``

Output

```1
1```

Time Complexity: O(x)
Auxiliary Space: O(1)

Method#2: Using reverse() function:

• When user inputs an integer, it is passed to method which will evaluate the result.
• Actual logic inside the method focuses on following:
• It first convert the integer to binary form of integer in string format.
• It reverse the string using reverse method.
• It is palindrome if both the string is equal else not.

Below is the implementation of the above approach:

## C++

 `// C++ program to check if binary representation ` `// of a number is palindrome` `#include ` `using` `namespace` `std;`   `// This function return the binary form of integer in string format` `string bin(unsigned n)` `{   string ans; ` `    ``while``(n > 0){` `        ``ans = (to_string(n&1)) + ans;` `        ``n >>= 1; ` `    ``}` `    `  `    ``return` `ans; ` `}`   `// This function returns true if binary ` `// representation of x is palindrome ` `bool` `checkPalindrome( unsigned ``int` `n){` `    ``string s1 = bin(n);` `    ``string s2 = s1; ` `    `  `    ``// reversing the string 1` `    ``reverse(s2.begin(), s2.end());` `    `  `    ``return` `s1 == s2; ` `}`   `// Driver code` `int` `main() {` `    ``unsigned ``int` `x = 1 << 15 + 1 << 16; ` `    ``cout << checkPalindrome(x) << endl; ` `    ``x = 10; ` `    ``cout << checkPalindrome(x) << endl; ` `    ``return` `0;` `}`

## Java

 `// Java program to check if binary representation ` `// of a number is palindrome` `class` `GFG` `{` `  `  `  ``// This function return the binary form of integer in string format` `  ``static` `String bin(``int` `n)` `  ``{   ` `    ``String ans = ``""``; ` `    ``while``(n > ``0``){` `      ``ans = (Integer.toString(n&``1``)) + ans;` `      ``n >>= ``1``; ` `    ``}`   `    ``return` `ans; ` `  ``}`   `  ``// This function returns true if binary ` `  ``// representation of x is palindrome ` `  ``static` `int` `checkPalindrome(``int` `n){` `    ``String s1 = bin(n);`   `    ``// reversing the string 1` `    ``StringBuilder s2 = ``new` `StringBuilder(s1);` `    ``s2 = s2.reverse();`     `    ``return` `s1.equals(s2.toString()) ? ``1` `: ``0``;` `  ``}`   `  ``public` `static` `void` `main(String[] args) {` `    ``int` `x = ``9``; ` `    ``System.out.println(checkPalindrome(x)); ` `    ``x = ``10``; ` `    ``System.out.println(checkPalindrome(x));  ` `  ``}` `}`   `// This code is contributed by phasing17.`

## Python

 `def` `bin``(n):` `    ``ans``=``""; ` `    ``while` `n > ``0``:` `        ``ans ``=` `(``str``(n&``1``)) ``+` `ans;` `        ``n >>``=` `1``; ` `    ``return` `ans; `   `def` `checkPalindrome(x):` `    ``s1 ``=` `bin``(x)` `    ``s2 ``=` `s1[::``-``1``]` `    ``return` `1` `if` `s1 ``=``=` `s2 ``else` `0`   `# Some test cases....` `x ``=` `9``;  ` `print``(checkPalindrome(x)) ``#  output 1 `   `x ``=` `10` `print``(checkPalindrome(x)) ``# output 0`

## C#

 `// C# program to check if binary representation` `// of a number is palindrome` `using` `System;`   `public` `class` `GFG` `{`   `  ``// This function returns the binary form of integer in` `  ``// string format` `  ``static` `string` `bin(``int` `n)` `  ``{` `    ``string` `ans = ``""``;` `    ``while` `(n > 0) {` `      ``ans = (Convert.ToString(n & 1)) + ans;` `      ``n >>= 1;` `    ``}`   `    ``return` `ans;` `  ``}`   `  ``// This function returns true if binary` `  ``// representation of x is palindrome` `  ``static` `int` `checkPalindrome(``int` `n)` `  ``{` `    ``string` `s1 = bin(n);`   `    ``// reversing the string 1` `    ``char``[] charArray = s1.ToCharArray();` `    ``Array.Reverse(charArray);` `    ``string` `s2 = ``new` `string``(charArray);`   `    ``return` `s1.Equals(s2) ? 1 : 0;` `  ``}`   `  ``// Driver Code` `  ``public` `static` `void` `Main(``string``[] args)` `  ``{` `    ``int` `x = 9;` `    ``Console.WriteLine(checkPalindrome(x));` `    ``x = 10;` `    ``Console.WriteLine(checkPalindrome(x));` `  ``}` `}`   `// This code is contributed by phasing17.`

## Javascript

 `// JavaScript program to check if binary representation ` `// of a number is palindrome`   `// This function return the binary form of integer in string format` `function` `bin(n)` `{   let ans=``""``; ` `    ``while``(n > 0){` `        ``ans = ((n&1).toString()) + ans;` `        ``n >>= 1; ` `    ``}` `    `  `    ``return` `ans; ` `}`   `// This function returns true if binary ` `// representation of x is palindrome ` `function` `checkPalindrome(x){` `    ``let s1 = bin(x);` `    ``// reversing the string s1` `    ``let s2 = s1.split(``""``).reverse().join(``""``);` `    ``return` `s1 === s2 ? 1 :0; ` `}`   `// Some test case ` `let x = 1 << 15 + 1 << 16 ; ` `console.log(checkPalindrome(x));`   `x = 10;` `console.log(checkPalindrome(x));`

Output

```1
0```

Time Complexity: O(log(x))
Auxiliary Space: O(X)

Method 3: Using builtin method bitset<>

• Convert the given number into its binary form.
• Check if it’s palindrome or not.

Below is the implementation of the above approach:

## C++

 `// C++ program to check if binary representation` `// of a number is palindrome` `#include ` `using` `namespace` `std;`   `int` `isPalindrome(``int` `N)` `{` `    ``// Converting N into binary representation` `    ``string s = bitset<32>(N).to_string();` `    ``s = s.substr(s.find(``'1'``));`   `    ``// Checking if it is palindrome or not` `    ``int` `i = 0, j = s.size() - 1;` `    ``while` `(i < j) {` `        ``if` `(s[i] != s[j])` `            ``return` `false``;` `        ``i++;` `        ``j--;` `    ``}` `    ``return` `true``;` `}`   `// Driver code` `int` `main()` `{` `    ``int` `x = 16;` `    ``cout << isPalindrome(x) << endl;` `    ``x = 17;` `    ``cout << isPalindrome(x) << endl;` `    ``return` `0;` `}`   `// This code is contributed by hkdass001`

## Java

 `// Java code for the above approach` `import` `java.io.*;`   `class` `Main {` `  ``public` `static` `boolean` `isPalindrome(``int` `N) ` `  ``{` `    `  `    ``// Converting N into binary representation` `    ``String s = Integer.toBinaryString(N);` `    `  `    ``// Checking if it is palindrome or not` `    ``int` `i = ``0``, j = s.length() - ``1``;` `    ``while` `(i < j) {` `      ``if` `(s.charAt(i) != s.charAt(j)) {` `        ``return` `false``;` `      ``}` `      ``i++;` `      ``j--;` `    ``}` `    ``return` `true``;` `  ``}`   `  ``public` `static` `void` `main(String[] args) {` `    ``int` `x = ``16``;` `    ``System.out.println(isPalindrome(x));` `    ``x = ``17``;` `    ``System.out.println(isPalindrome(x));` `  ``}` `}`   `// This code is contributed by lokeshpotta20.`

## Python3

 `# Python program to check if binary representation` `# of a number is palindrome` `import` `math`   `def` `isPalindrome(N):` `    ``# Converting N into binary representation` `    ``s ``=` `bin``(N)[``2``:]  ` `    ``s ``=` `s[s.index(``'1'``):]    ` `    ``# Checking if it is palindrome or not` `    ``i ``=` `0``;` `    ``j ``=` `len``(s) ``-` `1``;` `    ``while` `(i < j):` `        ``if` `(s[i] !``=` `s[j]):` `            ``return` `0``;` `        ``i``+``=``1``;` `        ``j``-``=``1``;` `    ``return` `1``;`   `# Driver code` `x ``=` `16``;` `print``(isPalindrome(x));` `x ``=` `17``;` `print``(isPalindrome(x));`

## C#

 `// C# program to check if binary representation` `// of a number is palindrome`   `using` `System;` `using` `System.Linq;` `using` `System.Collections.Generic;`   `class` `GFG ` `{`   `    ``static` `int` `isPalindrome(``int` `N)` `    ``{` `        ``// Converting N into binary representation` `        ``string` `s = Convert.ToString(N,2);`   `        ``// Checking if it is palindrome or not` `        ``int` `i = 0, j = s.Length - 1;` `        ``while` `(i < j) {` `            ``if` `(s[i] != s[j])` `                ``return` `0;` `            ``i++;` `            ``j--;` `        ``}` `        ``return` `1;` `    ``}` `    `  `    ``// Driver code` `    ``static` `public` `void` `Main()` `    ``{` `        ``int` `x = 16;` `        ``Console.WriteLine(isPalindrome(x));` `        ``x = 17;` `        ``Console.WriteLine(isPalindrome(x));` `    ``}` `}`

## Javascript

 `// Javascript program to check if binary representation` `// of a number is palindrome` `function` `isPalindrome(N)` `{` `    ``// Converting N into binary representation` `    ``const s = N.toString(2);` `    `  `    ``// Checking if it is palindrome or not` `    ``let i = 0, j = s.length - 1;` `    ``while` `(i < j) {` `        ``if` `(s[i] != s[j])` `            ``return` `0;` `        ``i++;` `        ``j--;` `    ``}` `    ``return` `1;` `}`   `// Driver code` `let x = 16;` `console.log(isPalindrome(x));` `x = 17;` `console.log(isPalindrome(x));`   `// This code is contributed by agrawalpoojaa976.`

Output

```0
1```

Time Complexity: O(k), where k is the number of bits in the given number X
Auxiliary Space: O(k)