Skip to main content

Check if a number is a mystery number

The "Mystery Number" problem is a fun and interesting mathematical puzzle. Given a positive integer, we want to determine if it is a mystery number and find the two positive integers whose sum is equal to the given number, and their reverse numbers are equal to each other.

Problem Statement

A mystery number is a positive integer N that can be expressed as the sum of two positive integers X and Y (X > 0, Y > 0) such that the reverse of X is equal to Y, and vice versa. We need to check whether a given number N is a mystery number and, if so, find the values of X and Y.

Explanation with Examples

  1. Let's take the number 33 as an example:

    • We start with X = 1 and Y = 32 (33 - 1).
    • The reverse of 1 is 1, which is equal to Y. So, 33 is a mystery number with X = 1 and Y = 32.
  2. Consider the number 948:

    • We start with X = 1 and Y = 947 (948 - 1).
    • The reverse of 1 is 1, but it is not equal to Y (which is 749). So, we increment X to 2 and set Y = 946 (948 - 2).
    • The reverse of 2 is 2, which is not equal to Y. We continue this process until we find that X = 177 and Y = 771.
    • The reverse of 177 is 771, which is equal to Y. Therefore, 948 is a mystery number with X = 177 and Y = 771.

Pseudocode and Algorithm

Let's outline the pseudocode for solving the mystery number problem:

reverse_num(number):
    result = 0
    while number is not 0:
        result = result * 10 + (number % 10)
        number = number / 10
    return result

is_mystery_no(number):
    status = 0
    x = 1
    y = 0
    counter = 1
    while counter <= (number / 2) and status is 0:
        x = counter
        y = number - counter
        if x % 10 is not 0 and y % 10 is not 0:
            if reverse_num(x) is equal to y:
                status = 1
        counter = counter + 1
    if status is 1:
        print "[number] Is Mystery Number Of (x, y)"
    else:
        print "[number] Is Not Mystery Number"

Explanation

  • The reverse_num function takes an integer as input and returns its reverse number. For example, reverse_num(123) returns 321.

  • The is_mystery_no function checks whether the given number is a mystery number or not. It initializes status to 0, which will be set to 1 if we find a valid pair (x, y). It uses a counter to iterate through possible values of x, and calculates y accordingly.

  • Inside the loop, it checks whether both x and y are non-zero digits (last digit is not zero) to ensure that they are positive integers. Then, it checks whether the reverse of x is equal to y.

  • If a valid pair (x, y) is found, it sets status to 1 and breaks out of the loop. Finally, it prints the result indicating whether the given number is a mystery number or not, along with the values of x and y if applicable.

Code Solution

Here given code implementation process.

// C program
// Check if a number is a mystery number

#include <stdio.h>

int reverse_num(int number)
{
	int result = 0;
	while (number != 0)
	{
		result = result * 10 + (number % 10);
		number = number / 10;
	}
	//returning the reversal of number
	return result;
}

//Check whether given number is Mystery Number or not
void is_mystery_no(int number)
{
	int status = 0;
	int x = 1;
	int y = 0;
	int counter = 1;
	while (counter <= (number / 2) && status == 0)
	{
		x = counter;
		y = number - counter;
		// Note that x + y is always equal to given number
		// Check whether, given number are last digit is zero or not
		if (x % 10 != 0 && y % 10 != 0)
		{
			if (reverse_num(x) == y)
			{
				//When both numbers are equal
				status = 1;
			}
		}
		counter++;
	}
	if (status == 1)
	{
		printf("\n [%d] Is Mystery Number Of (%d,%d)", number, x, y);
	}
	else
	{
		printf("\n [%d] Is Not Mystery Number", number);
	}
}

int main()
{
	//Test case
	is_mystery_no(33);
	is_mystery_no(948);
	is_mystery_no(44);
	is_mystery_no(123);
	is_mystery_no(143);
	is_mystery_no(154);
	return 0;
}

Output

 [33] Is Mystery Number Of (12,21)
 [948] Is Mystery Number Of (177,771)
 [44] Is Mystery Number Of (13,31)
 [123] Is Not Mystery Number
 [143] Is Mystery Number Of (49,94)
 [154] Is Mystery Number Of (59,95)
// Java program 
// Check if a number is a mystery number

class MysteryNo
{
	public int reverse_num(int number)
	{
		int result = 0;
		while (number != 0)
		{
			result = result * 10 + (number % 10);
			number = number / 10;
		}
		//returning the reversal of number
		return result;
	}
	//Check whether given number is Mystery Number or not
	public void is_mystery_no(int number)
	{
		boolean status = false;
		int x = 1;
		int y = 0;
		int counter = 1;
		while (counter <= (number / 2) && status == false)
		{
			x = counter;
			y = number - counter;
			// Note that x + y is always equal to given number
			// Check whether, given number are last digit is zero or not
			if (x % 10 != 0 && y % 10 != 0)
			{
				if (reverse_num(x) == y)
				{
					//When both numbers are equal
					status = true;
				}
			}
			counter++;
		}
		if (status == true)
		{
			System.out.print("\n [" + number + "] Is Mystery Number Of (" + x + "," + y + ")");
		}
		else
		{
			System.out.print("\n [" + number + "] Is Not Mystery Number");
		}
	}
	public static void main(String[] args)
	{
		MysteryNo obj = new MysteryNo();
		//Test case
		obj.is_mystery_no(33);
		obj.is_mystery_no(948);
		obj.is_mystery_no(44);
		obj.is_mystery_no(123);
		obj.is_mystery_no(143);
		obj.is_mystery_no(154);
	}
}

Output

 [33] Is Mystery Number Of (12,21)
 [948] Is Mystery Number Of (177,771)
 [44] Is Mystery Number Of (13,31)
 [123] Is Not Mystery Number
 [143] Is Mystery Number Of (49,94)
 [154] Is Mystery Number Of (59,95)
//Include header file
#include <iostream>
using namespace std;

// C++ program 
// Check if a number is a mystery number

class MysteryNo
{
	public: int reverse_num(int number)
	{
		int result = 0;
		while (number != 0)
		{
			result = result *10 + (number % 10);
			number = number / 10;
		}
		//returning the reversal of number
		return result;
	}
	//Check whether given number is Mystery Number or not
	void is_mystery_no(int number)
	{
		bool status = false;
		int x = 1;
		int y = 0;
		int counter = 1;
		while (counter <= (number / 2) && status == false)
		{
			x = counter;
			y = number - counter;
			// Note that x + y is always equal to given number
			// Check whether, given number are last digit is zero or not
			if (x % 10 != 0 && y % 10 != 0)
			{
				if (this->reverse_num(x) == y)
				{
					//When both numbers are equal
					status = true;
				}
			}
			counter++;
		}
		if (status == true)
		{
			cout << "\n [" << number << "] Is Mystery Number Of (" << x << "," << y << ")";
		}
		else
		{
			cout << "\n [" << number << "] Is Not Mystery Number";
		}
	}
};
int main()
{
	MysteryNo obj = MysteryNo();
	//Test case
	obj.is_mystery_no(33);
	obj.is_mystery_no(948);
	obj.is_mystery_no(44);
	obj.is_mystery_no(123);
	obj.is_mystery_no(143);
	obj.is_mystery_no(154);
	return 0;
}

Output

 [33] Is Mystery Number Of (12,21)
 [948] Is Mystery Number Of (177,771)
 [44] Is Mystery Number Of (13,31)
 [123] Is Not Mystery Number
 [143] Is Mystery Number Of (49,94)
 [154] Is Mystery Number Of (59,95)
//Include namespace system
using System;

// C# program 
// Check if a number is a mystery number

class MysteryNo
{
	public int reverse_num(int number)
	{
		int result = 0;
		while (number != 0)
		{
			result = result * 10 + (number % 10);
			number = number / 10;
		}
		//returning the reversal of number
		return result;
	}
	//Check whether given number is Mystery Number or not
	public void is_mystery_no(int number)
	{
		Boolean status = false;
		int x = 1;
		int y = 0;
		int counter = 1;
		while (counter <= (number / 2) && status == false)
		{
			x = counter;
			y = number - counter;
			// Note that x + y is always equal to given number
			// Check whether, given number are last digit is zero or not
			if (x % 10 != 0 && y % 10 != 0)
			{
				if (reverse_num(x) == y)
				{
					//When both numbers are equal
					status = true;
				}
			}
			counter++;
		}
		if (status == true)
		{
			Console.Write("\n [" + number + "] Is Mystery Number Of (" + x + "," + y + ")");
		}
		else
		{
			Console.Write("\n [" + number + "] Is Not Mystery Number");
		}
	}
	public static void Main(String[] args)
	{
		MysteryNo obj = new MysteryNo();
		//Test case
		obj.is_mystery_no(33);
		obj.is_mystery_no(948);
		obj.is_mystery_no(44);
		obj.is_mystery_no(123);
		obj.is_mystery_no(143);
		obj.is_mystery_no(154);
	}
}

Output

 [33] Is Mystery Number Of (12,21)
 [948] Is Mystery Number Of (177,771)
 [44] Is Mystery Number Of (13,31)
 [123] Is Not Mystery Number
 [143] Is Mystery Number Of (49,94)
 [154] Is Mystery Number Of (59,95)
<?php
// Php program 
// Check if a number is a mystery number
class MysteryNo
{
	public	function reverse_num($number)
	{
		$result = 0;
		while ($number != 0)
		{
			$result = $result * 10 + ($number % 10);
			$number = intval($number / 10);
		}
		//returning the reversal of number
		return $result;
	}
	//Check whether given number is Mystery Number or not
	public	function is_mystery_no($number)
	{
		$status = false;
		$x = 1;
		$y = 0;
		$counter = 1;
		while ($counter <= (intval($number / 2)) && $status == false)
		{
			$x = $counter;
			$y = $number - $counter;
			// Note that x + y is always equal to given number
			// Check whether, given number are last digit is zero or not
			if ($x % 10 != 0 && $y % 10 != 0)
			{
				if ($this->reverse_num($x) == $y)
				{
					//When both numbers are equal
					$status = true;
				}
			}
			$counter++;
		}
		if ($status == true)
		{
			echo "\n [". $number ."] Is Mystery Number Of (". $x .",". $y .")";
		}
		else
		{
			echo "\n [". $number ."] Is Not Mystery Number";
		}
	}
}

function main()
{
	$obj = new MysteryNo();
	//Test case
	$obj->is_mystery_no(33);
	$obj->is_mystery_no(948);
	$obj->is_mystery_no(44);
	$obj->is_mystery_no(123);
	$obj->is_mystery_no(143);
	$obj->is_mystery_no(154);
}
main();

Output

 [33] Is Mystery Number Of (12,21)
 [948] Is Mystery Number Of (177,771)
 [44] Is Mystery Number Of (13,31)
 [123] Is Not Mystery Number
 [143] Is Mystery Number Of (49,94)
 [154] Is Mystery Number Of (59,95)
// Node Js program 
// Check if a number is a mystery number
class MysteryNo
{
	reverse_num(number)
	{
		var result = 0;
		while (number != 0)
		{
			result = result * 10 + (number % 10);
			number = parseInt(number / 10);
		}
		//returning the reversal of number
		return result;
	}
	//Check whether given number is Mystery Number or not
	is_mystery_no(number)
	{
		var status = false;
		var x = 1;
		var y = 0;
		var counter = 1;
		while (counter <= (parseInt(number / 2)) && status == false)
		{
			x = counter;
			y = number - counter;
			// Note that x + y is always equal to given number
			// Check whether, given number are last digit is zero or not
			if (x % 10 != 0 && y % 10 != 0)
			{
				if (this.reverse_num(x) == y)
				{
					//When both numbers are equal
					status = true;
				}
			}
			counter++;
		}
		if (status == true)
		{
			process.stdout.write("\n [" + number + "] Is Mystery Number Of (" + x + "," + y + ")");
		}
		else
		{
			process.stdout.write("\n [" + number + "] Is Not Mystery Number");
		}
	}
}

function main()
{
	var obj = new MysteryNo();
	//Test case
	obj.is_mystery_no(33);
	obj.is_mystery_no(948);
	obj.is_mystery_no(44);
	obj.is_mystery_no(123);
	obj.is_mystery_no(143);
	obj.is_mystery_no(154);
}
main();

Output

 [33] Is Mystery Number Of (12,21)
 [948] Is Mystery Number Of (177,771)
 [44] Is Mystery Number Of (13,31)
 [123] Is Not Mystery Number
 [143] Is Mystery Number Of (49,94)
 [154] Is Mystery Number Of (59,95)
#  Python 3 program 
#  Check if a number is a mystery number

class MysteryNo :
	def reverse_num(self, number) :
		result = 0
		while (number != 0) :
			result = result * 10 + (number % 10)
			number = int(number / 10)
		
		# returning the reversal of number
		return result
	
	# Check whether given number is Mystery Number or not
	def is_mystery_no(self, number) :
		status = False
		x = 1
		y = 0
		counter = 1
		while (counter <= (int(number / 2)) and status == False) :
			x = counter
			y = number - counter
			#  Note that x + y is always equal to given number
			#  Check whether, given number are last digit is zero or not
			if (x % 10 != 0 and y % 10 != 0) :
				if (self.reverse_num(x) == y) :
					# When both numbers are equal
					status = True
				
			
			counter += 1
		
		if (status == True) :
			print("\n [", number ,"] Is Mystery Number Of (", x ,",", y ,")", end = "")
		else :
			print("\n [", number ,"] Is Not Mystery Number", end = "")
		
	

def main() :
	obj = MysteryNo()
	# Test case
	obj.is_mystery_no(33)
	obj.is_mystery_no(948)
	obj.is_mystery_no(44)
	obj.is_mystery_no(123)
	obj.is_mystery_no(143)
	obj.is_mystery_no(154)

if __name__ == "__main__": main()

Output

 [ 33 ] Is Mystery Number Of ( 12 , 21 )
 [ 948 ] Is Mystery Number Of ( 177 , 771 )
 [ 44 ] Is Mystery Number Of ( 13 , 31 )
 [ 123 ] Is Not Mystery Number
 [ 143 ] Is Mystery Number Of ( 49 , 94 )
 [ 154 ] Is Mystery Number Of ( 59 , 95 )
#  Ruby program 
#  Check if a number is a mystery number

class MysteryNo 
	def reverse_num(number) 
		result = 0
		while (number != 0) 
			result = result * 10 + (number % 10)
			number = number / 10
		end

		# returning the reversal of number
		return result
	end

	# Check whether given number is Mystery Number or not
	def is_mystery_no(number) 
		status = false
		x = 1
		y = 0
		counter = 1
		while (counter <= (number / 2) && status == false) 
			x = counter
			y = number - counter
			#  Note that x + y is always equal to given number
			#  Check whether, given number are last digit is zero or not
			if (x % 10 != 0 && y % 10 != 0) 
				if (self.reverse_num(x) == y) 
					# When both numbers are equal
					status = true
				end

			end

			counter += 1
		end

		if (status == true) 
			print("\n [", number ,"] Is Mystery Number Of (", x ,",", y ,")")
		else 
			print("\n [", number ,"] Is Not Mystery Number")
		end

	end

end

def main() 
	obj = MysteryNo.new()
	# Test case
	obj.is_mystery_no(33)
	obj.is_mystery_no(948)
	obj.is_mystery_no(44)
	obj.is_mystery_no(123)
	obj.is_mystery_no(143)
	obj.is_mystery_no(154)
end

main()

Output

 [33] Is Mystery Number Of (12,21)
 [948] Is Mystery Number Of (177,771)
 [44] Is Mystery Number Of (13,31)
 [123] Is Not Mystery Number
 [143] Is Mystery Number Of (49,94)
 [154] Is Mystery Number Of (59,95)
// Scala program 
// Check if a number is a mystery number

class MysteryNo
{
	def reverse_num(n: Int): Int = {
      	var number: Int = n;
		var result: Int = 0;
		while (number != 0)
		{
			result = result * 10 + (number % 10);
			number = (number / 10).toInt;
		}
		//returning the reversal of number
		return result;
	}
	//Check whether given number is Mystery Number or not
	def is_mystery_no(number: Int): Unit = {
		var status: Boolean = false;
		var x: Int = 1;
		var y: Int = 0;
		var counter: Int = 1;
		while (counter <= ((number / 2).toInt) && status == false)
		{
			x = counter;
			y = number - counter;
			// Note that x + y is always equal to given number
			// Check whether, given number are last digit is zero or not
			if (x % 10 != 0 && y % 10 != 0)
			{
				if (reverse_num(x) == y)
				{
					//When both numbers are equal
					status = true;
				}
			}
			counter += 1;
		}
		if (status == true)
		{
			print("\n [" + number + "] Is Mystery Number Of (" + x + "," + y + ")");
		}
		else
		{
			print("\n [" + number + "] Is Not Mystery Number");
		}
	}
}
object Main
{
	def main(args: Array[String]): Unit = {
		var obj: MysteryNo = new MysteryNo();
		//Test case
		obj.is_mystery_no(33);
		obj.is_mystery_no(948);
		obj.is_mystery_no(44);
		obj.is_mystery_no(123);
		obj.is_mystery_no(143);
		obj.is_mystery_no(154);
	}
}

Output

 [33] Is Mystery Number Of (12,21)
 [948] Is Mystery Number Of (177,771)
 [44] Is Mystery Number Of (13,31)
 [123] Is Not Mystery Number
 [143] Is Mystery Number Of (49,94)
 [154] Is Mystery Number Of (59,95)
// Swift 4 program 
// Check if a number is a mystery number
class MysteryNo
{
	func reverse_num(_ n: Int) -> Int
	{
      	var number: Int = n;
		var result: Int = 0;
		while (number != 0)
		{
			result = result * 10 + (number % 10);
			number = number / 10;
		}
		//returning the reversal of number
		return result;
	}
	//Check whether given number is Mystery Number or not
	func is_mystery_no(_ number: Int)
	{
		var status: Bool = false;
		var x: Int = 1;
		var y: Int = 0;
		var counter: Int = 1;
		while (counter <= (number / 2) && status == false)
		{
			x = counter;
			y = number - counter;
			// Note that x + y is always equal to given number
			// Check whether, given number are last digit is zero or not
			if (x % 10 != 0 && y % 10 != 0)
			{
				if (self.reverse_num(x) == y)
				{
					//When both numbers are equal
					status = true;
				}
			}
			counter += 1;
		}
		if (status == true)
		{
			print("\n [", number ,"]Is Mystery Number Of (", x ,",", y ,")", terminator: "");
		}
		else
		{
			print("\n [", number ,"]Is Not Mystery Number", terminator: "");
		}
	}
}
func main()
{
	let obj: MysteryNo = MysteryNo();
	//Test case
	obj.is_mystery_no(33);
	obj.is_mystery_no(948);
	obj.is_mystery_no(44);
	obj.is_mystery_no(123);
	obj.is_mystery_no(143);
	obj.is_mystery_no(154);
}
main();

Output

 [ 33 ]Is Mystery Number Of ( 12 , 21 )
 [ 948 ]Is Mystery Number Of ( 177 , 771 )
 [ 44 ]Is Mystery Number Of ( 13 , 31 )
 [ 123 ]Is Not Mystery Number
 [ 143 ]Is Mystery Number Of ( 49 , 94 )
 [ 154 ]Is Mystery Number Of ( 59 , 95 )

Time Complexity

The time complexity of the algorithm mainly depends on the reverse_num function, which has a time complexity of O(log n), where n is the number of digits in the input number. The is_mystery_no function has a loop that runs up to number/2 times, so its time complexity is O(number). Therefore, the overall time complexity of the code is O(number * log n), where n is the number of digits in the input number.

Output Explanation

The given C program calls the is_mystery_no function for several test cases:

  1. is_mystery_no(33): The function finds that 33 is a mystery number with x = 12 and y = 21. So, it prints "[33] Is Mystery Number Of (12, 21)".

  2. is_mystery_no(948): The function finds that 948 is a mystery number with x = 177 and y = 771. So, it prints "[948] Is Mystery Number Of (177, 771)".

  3. is_mystery_no(44): The function finds that 44 is a mystery number with x = 13 and y = 31. So, it prints "[44] Is Mystery Number Of (13, 31)".

  4. is_mystery_no(123): The function doesn't find a valid pair (x, y) for 123, so it prints "[123] Is Not Mystery Number".

  5. is_mystery_no(143): The function finds that 143 is a mystery number with x = 49 and y = 94. So, it prints "[143] Is Mystery Number Of (49, 94)".

  6. is_mystery_no(154): The function finds that 154 is a mystery number with x = 59 and y = 95. So, it prints "[154] Is Mystery Number Of (59, 95)".

The output confirms whether each test case is a mystery number or not, and if it is, it provides the corresponding values of x and y.





Comment

Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.

New Comment