Palindromic Selfie Numbers

Given a number x, find it’s palindromic selfie number according to selfie multiplicative rule. If such a number doesn’t exist, then print “No such number exists”.

A Palindromic selfie number satisfies the selfie multiplicative rule such that there exists another number y with x * reverse_digits_of(x) = y * reverse_digits_of(y), with the condition that the number y is obtained by some ordering of the digits in x, i.e x and y should have same digits with different order.

Examples :

Input : 1224
Output : 2142
Explanation :
Because, 1224 X 4221 = 2142 X 2412
And all digits of 2142 are formed by a different 
permutation of the digits in 1224
(Note: The valid output is either be 2142 or 2412)

Input : 13452
Output : 14532
Explanation :
Because, 13452 X 25431 = 14532 X 23541
And all digits of 14532 are formed by a different 
permutation of the digits in 13452

Input : 12345
Output : No such number exists
Explanation :
Because, with no combination of digits 1, 2, 3, 4, 5 
could we get a number that satisfies 
12345 X 54321 = number X reverse_of_its_digits

Approach :


Below is implementation of above approach :

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to find palindromic selfie numbers
import java.util.*;
  
public class palindrome_selfie {
    // To store all permuations of digits in the number
    Set<Integer> all_permutes = new HashSet<Integer>();
  
    int number; // input number
  
    public palindrome_selfie(int num)
    {
        number = num;
    }
  
    // Function to reverse the digits of a number
    public int palindrome(int num)
    {
        int reversednum = 0;
        int d;
        while (num > 0) {
            d = num % 10; // Extract last digit
  
            // Append it at the beg
            reversednum = reversednum * 10 + d;
            num = num / 10// Reduce number until 0
        }
  
        return reversednum;
    }
  
    // Function to check palindromic selfie
    public void palin_selfie()
    {
        // Length of the number required for
        // calculating all permuatations of the digits
        int l = String.valueOf(number).length() - 1;
          
        this.permute(number, 0, l); // Calculate all permuations
          
        /* Remove the number and its palindrome from
           the obtained set as this is the LHS of
           multiplicative equality */
        all_permutes.remove(palindrome(number));
        all_permutes.remove(number);
  
        boolean flag = false; // Denotes the status result
  
        // Iterate over all other numbers
        Iterator it = all_permutes.iterator();
        while (it.hasNext()) {
            int number2 = (int)it.next();
  
            // Check for equality x*palin(x) = y*palin(y)
            if (number * palindrome(number) == 
                         number2 * palindrome(number2)) {
                System.out.println("Palindrome multiplicative"
                                    "selfie of "+ number + " is  : "
                                     + number2);
  
                flag = true; // Answer found
                break;
            }
        }
  
        // If no such number found
        if (flag == false) {
            System.out.println("Given number has no palindrome selfie.");
        }
    }
  
    // Function to get all possible possible permuations
    // of the digits in num
    public void permute(int num, int l, int r)
    {
        // Adds the new permuation obatined in the set
        if (l == r)
            all_permutes.add(num);
  
        else {
            for (int i = l; i <= r; i++) {
  
                // Swap digits to get a different ordering
                num = swap(num, l, i);
  
                // Recurse to next pair of digits
                permute(num, l + 1, r);
                num = swap(num, l, i); // Swap back
            }
        }
    }
  
    // Function that swaps the digits i and j in the num
    public int swap(int num, int i, int j)
    {
        char temp;
  
        // Convert int to char array
        char[] charArray = String.valueOf(num).toCharArray();
  
        // Swap the ith and jth character
        temp = charArray[i];
        charArray[i] = charArray[j];
        charArray[j] = temp;
  
        // Convert back to int and return
        return Integer.valueOf(String.valueOf(charArray));
    }
  
    // Driver Function
    public static void main(String args[])
    {
        // First example, input = 145572
        palindrome_selfie example1 = new palindrome_selfie(145572);
        example1.palin_selfie();
  
        // Second example, input = 19362
        palindrome_selfie example2 = new palindrome_selfie(19362);
        example2.palin_selfie();
  
        // Third example, input = 4669
        palindrome_selfie example3 = new palindrome_selfie(4669);
        example3.palin_selfie();
    }
}
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to find palindromic selfie numbers
using System;
using System.Collections.Generic;
  
public class palindrome_selfie 
{
    // To store all permuations of digits in the number
    HashSet<int> all_permutes = new HashSet<int>();
  
    int number; // input number
  
    public palindrome_selfie(int num)
    {
        number = num;
    }
  
    // Function to reverse the digits of a number
    public int palindrome(int num)
    {
        int reversednum = 0;
        int d;
        while (num > 0)
        {
            d = num % 10; // Extract last digit
  
            // Append it at the beg
            reversednum = reversednum * 10 + d;
            num = num / 10; // Reduce number until 0
        }
        return reversednum;
    }
  
    // Function to check palindromic selfie
    public void palin_selfie()
    {
        // Length of the number required for
        // calculating all permuatations of the digits
        int l = String.Join("",number).Length - 1;
          
        this.permute(number, 0, l); // Calculate all permuations
          
        /* Remove the number and its palindrome from
        the obtained set as this is the LHS of
        multiplicative equality */
        all_permutes.Remove(palindrome(number));
        all_permutes.Remove(number);
  
        bool flag = false; // Denotes the status result
  
        // Iterate over all other numbers
        foreach (var number2 in all_permutes) 
        {
  
            // Check for equality x*palin(x) = y*palin(y)
            if (number * palindrome(number) == 
                        number2 * palindrome(number2)) 
            {
                Console.WriteLine("Palindrome multiplicative"
                                    "selfie of "+ number + " is : "
                                    + number2);
  
                flag = true; // Answer found
                break;
            }
        }
  
        // If no such number found
        if (flag == false
        {
            Console.WriteLine("Given number has "
                            "no palindrome selfie.");
        }
    }
  
    // Function to get all possible possible 
    // permuations of the digits in num
    public void permute(int num, int l, int r)
    {
        // Adds the new permuation obatined in the set
        if (l == r)
            all_permutes.Add(num);
  
        else 
        {
            for (int i = l; i <= r; i++)
            {
  
                // Swap digits to get a different ordering
                num = swap(num, l, i);
  
                // Recurse to next pair of digits
                permute(num, l + 1, r);
                num = swap(num, l, i); // Swap back
            }
        }
    }
  
    // Function that swaps the 
    // digits i and j in the num
    public int swap(int num, int i, int j)
    {
        char temp;
  
        // Convert int to char array
        char[] charArray = String.Join("",num).ToCharArray();
  
        // Swap the ith and jth character
        temp = charArray[i];
        charArray[i] = charArray[j];
        charArray[j] = temp;
  
        // Convert back to int and return
        return int.Parse(String.Join("",charArray));
    }
  
    // Driver code
    public static void Main(String []args)
    {
        // First example, input = 145572
        palindrome_selfie example1 = new palindrome_selfie(145572);
        example1.palin_selfie();
  
        // Second example, input = 19362
        palindrome_selfie example2 = new palindrome_selfie(19362);
        example2.palin_selfie();
  
        // Third example, input = 4669
        palindrome_selfie example3 = new palindrome_selfie(4669);
        example3.palin_selfie();
    }
}
  
// This code contributed by Rajput-Ji
chevron_right

Output :

Palindrome multiplicative selfie of 145572 is  : 157452
Given number has no palindrome selfie.
Palindrome multiplicative selfie of 4669 is  : 6496



Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Improved By : Rajput-Ji



Article Tags :