From 98656cb0cdacd175559272bcbb8bc3b86ddac52a Mon Sep 17 00:00:00 2001 From: s-devran <78323181+s-devran@users.noreply.github.com> Date: Wed, 15 Dec 2021 17:55:04 +0300 Subject: [PATCH] Add Kaprekar Numbers (#2881) --- .../thealgorithms/maths/KaprekarNumbers.java | 27 +++++++++ .../maths/KaprekarNumbersTest.java | 58 +++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 src/main/java/com/thealgorithms/maths/KaprekarNumbers.java create mode 100644 src/test/java/com/thealgorithms/maths/KaprekarNumbersTest.java diff --git a/src/main/java/com/thealgorithms/maths/KaprekarNumbers.java b/src/main/java/com/thealgorithms/maths/KaprekarNumbers.java new file mode 100644 index 000000000..c922ab25d --- /dev/null +++ b/src/main/java/com/thealgorithms/maths/KaprekarNumbers.java @@ -0,0 +1,27 @@ +package com.thealgorithms.maths; + +public class KaprekarNumbers { + + /* This program demonstrates if a given number is Kaprekar Number or not. + Kaprekar Number: A Kaprekar number is an n-digit number which its square can be split into two parts where the right part has n + digits and sum of these parts is equal to the original number. */ + + // Checks whether a given number is Kaprekar Number or not + + public static boolean isKaprekarNumber(long number) { + long numberSquared = number * number; + if(Long.toString(number).length() == Long.toString(numberSquared).length()){ + return (number == numberSquared); + } + else{ + long leftDigits1 = 0, leftDigits2 = 0; + if(Long.toString(numberSquared).contains("0")){ + leftDigits1 = Long.parseLong(Long.toString(numberSquared).substring(0, Long.toString(numberSquared).indexOf("0"))); + } + leftDigits2 = Long.parseLong(Long.toString(numberSquared).substring(0, (Long.toString(numberSquared).length() - Long.toString(number).length()))); + long rightDigits = Long.parseLong(Long.toString(numberSquared).substring(Long.toString(numberSquared).length() - Long.toString(number).length())); + return (number == (leftDigits1 + rightDigits)) || (number == (leftDigits2 + rightDigits)); + } + } + +} diff --git a/src/test/java/com/thealgorithms/maths/KaprekarNumbersTest.java b/src/test/java/com/thealgorithms/maths/KaprekarNumbersTest.java new file mode 100644 index 000000000..04f8cc09b --- /dev/null +++ b/src/test/java/com/thealgorithms/maths/KaprekarNumbersTest.java @@ -0,0 +1,58 @@ +package com.thealgorithms.maths; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +public class KaprekarNumbersTest { + + @Test + void testFor1() + { + assertTrue(KaprekarNumbers.isKaprekarNumber(1)); + } + + @Test + void testFor45() + { + assertTrue(KaprekarNumbers.isKaprekarNumber(45)); + } + + @Test + void testFor297() + { + assertTrue(KaprekarNumbers.isKaprekarNumber(297)); + } + + @Test + void testFor2223() + { + assertTrue(KaprekarNumbers.isKaprekarNumber(2223)); + } + + @Test + void testFor857143() + { + assertTrue(KaprekarNumbers.isKaprekarNumber(857143)); + } + + + @Test + void testFor3() + { + assertFalse(KaprekarNumbers.isKaprekarNumber(3)); + } + + @Test + void testFor26() + { + assertFalse(KaprekarNumbers.isKaprekarNumber(26)); + } + + @Test + void testFor98() + { + assertFalse(KaprekarNumbers.isKaprekarNumber(98)); + } + +} \ No newline at end of file