Skip to content

Commit ab9f74c

Browse files
Add BigInteger to karprekar number (TheAlgorithms#2899)
Co-authored-by: Andrii Siriak <siryaka@gmail.com>
1 parent 2a27d09 commit ab9f74c

File tree

2 files changed

+36
-11
lines changed

2 files changed

+36
-11
lines changed

src/main/java/com/thealgorithms/maths/KaprekarNumbers.java

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
package com.thealgorithms.maths;
2+
import java.math.BigInteger;
23
import java.util.*;
34

45
public 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
}
2932
else{
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

src/test/java/com/thealgorithms/maths/KaprekarNumbersTest.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.thealgorithms.maths;
22

33
import org.junit.jupiter.api.Test;
4-
4+
import java.util.ArrayList;
55
import static org.junit.jupiter.api.Assertions.*;
66

77
public class KaprekarNumbersTest {
@@ -55,4 +55,16 @@ void testFor98()
5555
assertFalse(KaprekarNumbers.isKaprekarNumber(98));
5656
}
5757

58+
@Test
59+
void testForRangeOfNumber() { try {
60+
ArrayList<Long> rangedNumbers = KaprekarNumbers.kaprekarNumberInRange(1,100000);
61+
long[] allTheNumbers = {1, 9, 45, 55, 99, 297, 703, 999, 2223, 2728, 4950, 5050, 7272, 7777, 9999, 17344, 22222, 77778, 82656, 95121, 99999};
62+
for (long i:allTheNumbers) {
63+
assert rangedNumbers.contains(i);
64+
}
65+
} catch (Exception e) {
66+
assert false;
67+
}
68+
}
69+
5870
}

0 commit comments

Comments
 (0)