11package com .thealgorithms .maths ;
2+ import java .math .BigInteger ;
23import java .util .*;
34
45public class KaprekarNumbers {
@@ -21,19 +22,31 @@ public static ArrayList<Long> kaprekarNumberInRange(long start, long end) throws
2122}
2223
2324// Checks whether a given number is Kaprekar Number or not
24- public static boolean isKaprekarNumber (long number ) {
25- long numberSquared =number *number ;
26- if (Long .toString (number ).length () ==Long .toString (numberSquared ).length ()){
27- return (number ==numberSquared );
25+ public static boolean isKaprekarNumber (long num ) {
26+ String number =Long .toString (num );
27+ BigInteger originalNumber =new BigInteger (number );
28+ BigInteger numberSquared =originalNumber .multiply (originalNumber );
29+ if (number .length () ==numberSquared .toString ().length ()){
30+ return number .equals (numberSquared .toString ());
2831}
2932else {
30- long leftDigits1 =0 ,leftDigits2 ;
31- if (Long .toString (numberSquared ).contains ("0" )){
32- leftDigits1 =Long .parseLong (Long .toString (numberSquared ).substring (0 ,Long .toString (numberSquared ).indexOf ("0" )));
33+ BigInteger leftDigits1 =new BigInteger ("0" );
34+ BigInteger leftDigits2 ;
35+ if (numberSquared .toString ().contains ("0" )){
36+ leftDigits1 =new BigInteger (
37+ numberSquared .toString ().
38+ substring (0 ,numberSquared .toString ().indexOf ("0" )
39+ )
40+ );
3341}
34- leftDigits2 =Long .parseLong (Long .toString (numberSquared ).substring (0 , (Long .toString (numberSquared ).length () -Long .toString (number ).length ())));
35- long rightDigits =Long .parseLong (Long .toString (numberSquared ).substring (Long .toString (numberSquared ).length () -Long .toString (number ).length ()));
36- return (number == (leftDigits1 +rightDigits )) || (number == (leftDigits2 +rightDigits ));
42+ leftDigits2 =new BigInteger (
43+ numberSquared .toString ()
44+ .substring (0 , (numberSquared .toString ().length () -number .length ()))
45+ );
46+ BigInteger rightDigits =new BigInteger (numberSquared .toString ().substring (numberSquared .toString ().length () -number .length ()));
47+ String x =leftDigits1 .add (rightDigits ).toString ();
48+ String y =leftDigits2 .add (rightDigits ).toString ();
49+ return (number .equals (x )) || (number .equals (y ));
3750}
3851}
3952