# Kaprekar Number Program in Java

In this post we will develop a Java program to check the given number is kaprekar number or not. Later we will also develop a Java program to find all the kaprekar numbers in the given range.

A number whose square divided into two parts (none of the parts have only 0) and the sum of the parts is equal to the original number then it is called kaprekar number. The kaprekar number is named after D. R. Kaprekar.

Example of kaprekar numbers:- 45
The square of 45 = 2025
20 + 25 = 45, so 45 is a kaprekar number.

10, 100, 1000 are not a kaprekar number
10^2 = 100 => 10 + 0= 10
100^2 = 10000 = 100 + 00 = 100
But the condition is none of the part having only 0, so these are not the kaprekar number.

Procedure to check the given number is kaprekar number or not

1) Take a number.
2) Find its square value.
3) Count the number of digits in the square.
4) Take a iterator variable (i) starting from number_of_digits_in_square – 1
5) Find the first part of the number, as dividing the square value by 10^i
6) Find the second part as the calculating remainder value after dividing 10^i
7) Check any part having only 0, if yes then skip the iteration.
8) Calculate the sum of both parts.
9) Compare sum and number, if both are equal then the given number is kaprekar number.

## Java program to check number is kaprekar number or not

``````import java.util.Scanner;

public class KaprekarNumber {

public static boolean isKaprekar(int number) {

// declare variables
int square = 0;
int temp = 0;
int countDigits = 0;
int firstPart = 0;
int secondPart = 0;
int sum = 0;

// calculate square value of the number
square = number * number;

// count number of digits in the square
temp =square;
while(temp!=0) {
countDigits++;
temp /= 10;
}

// divide square into two parts and
// check it's sum is equal to the number?
for(int i=countDigits-1; i>0; i--) {

// find first part
firstPart = square / (int)Math.pow(10, i);
// find second part
secondPart = square % (int)Math.pow(10, i);

// check have any part only 0
if(firstPart == 0 || secondPart == 0)
continue;
// find sum value
sum = firstPart + secondPart;

// compare sum and number
if( sum == number )
return true;
}
return false;
}

public static void main(String[] args) {

// declare variables
int number = 0;

Scanner scan =  new Scanner(System.in);
System.out.print("Enter an integer number:: ");
number = scan.nextInt();

// check the number is kaprekar number or not
if(isKaprekar(number))
System.out.println(number+" is a"
+ " kaprekar number");
else
System.out.println(number+" is not a"
+ " kaprekar number");

// close Scanner class object
scan.close();
}
}``````

The output for the different test-cases:-

Enter an integer number:: 45
45 is a kaprekar number

Enter an integer number:: 55
55 is a kaprekar number

Enter an integer number:: 25
25 is not a kaprekar number

## Java Program to find all kaprekar number in a given range

Using loops we can also find all the kaprekar numbers in a given range. The below program demonstrates it.

``````import java.util.Scanner;

public class KaprekarNumberInRange {

public static boolean isKaprekar(int number) {

// declare variables
int square = 0;
int temp = 0;
int countDigits = 0;
int firstPart = 0;
int secondPart = 0;
int sum = 0;

// calculate square value of the number
square = number * number;

// count number of digits in the square
temp =square;
while(temp!=0) {
countDigits++;
temp /= 10;
}

// divide square into two parts and
// check it's sum is equal to the number?
for(int i=countDigits-1; i>0; i--) {

// find first part
firstPart = square / (int)Math.pow(10, i);
// find second part
secondPart = square % (int)Math.pow(10, i);

// check have any part only 0
if(firstPart == 0 || secondPart == 0)
continue;

// find sum value
sum = firstPart + secondPart;

// compare sum and number
if( sum == number )
return true;
}
return false;
}

public static void main(String[] args) {

// declare variables
int minRange = 0, maxRange = 0;

// create Scanner class object
Scanner scan = new Scanner(System.in);
System.out.print("Enter min value of range:: ");
minRange = scan.nextInt();

System.out.print("Enter max value of range:: ");
maxRange = scan.nextInt();

// check number
System.out.println("The kaprekar numbers from "+
minRange+" to "+ maxRange+" are:: ");

for(int i=minRange; i<=maxRange; i++) {
if(isKaprekar(i))
System.out.print(i+" ");
}

// close Scanner class object
scan.close();
}
}``````

The output for the different test-cases:-

Enter min value of range:: 1
Enter max value of range:: 100
The kaprekar numbers from 1 to 100 are::
`9 45 55 99`

Enter min value of range:: 100
Enter max value of range:: 100000
The kaprekar numbers from 100 to 100000 are::
`297 703 999 2223 2728 4879 4950 5050 5292 7272 7777 9999 17344 22222 38962`

If you enjoyed this post, share it with your friends. Do you want to share more information about the topic discussed above or do you find anything incorrect? Let us know in the comments. Thank you!