From e22634e17d05b3c19181bb40b936995fa884acb3 Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Sun, 13 Oct 2024 08:52:22 +0530 Subject: [PATCH 1/5] feat: Add `BCDConverter` new algorithm with Junit tests --- .../conversions/BCDConverter.java | 47 +++++++++++++++++++ .../conversions/BCDConverterTest.java | 20 ++++++++ 2 files changed, 67 insertions(+) create mode 100644 src/main/java/com/thealgorithms/conversions/BCDConverter.java create mode 100644 src/test/java/com/thealgorithms/conversions/BCDConverterTest.java diff --git a/src/main/java/com/thealgorithms/conversions/BCDConverter.java b/src/main/java/com/thealgorithms/conversions/BCDConverter.java new file mode 100644 index 000000000000..df4eb39056dc --- /dev/null +++ b/src/main/java/com/thealgorithms/conversions/BCDConverter.java @@ -0,0 +1,47 @@ +package com.thealgorithms.conversions; + +/** + * Provides methods to convert between Decimal and Binary Coded Decimal (BCD). + * Decimal to BCD: Each decimal digit is converted to its 4-bit binary equivalent. + * Example: 123 -> 0001 0010 0011 + * + * BCD to Decimal: Each 4-bit binary number is converted to its decimal equivalent. + * Example: 0001 0010 0011 -> 123 + * + * Applications: Used in digital systems like calculators and clocks. + * + * @author Hardvan + */ +public final class BCDConverter { + private BCDConverter() { + } + + /** + * Converts a decimal number to its BCD (Binary Coded Decimal) representation. + * @param number the decimal number to be converted. + * @return the BCD as a String. + */ + public static String decimalToBCD(int number) { + StringBuilder bcd = new StringBuilder(); + while (number > 0) { + int digit = number % 10; + bcd.insert(0, String.format("%04d", Integer.parseInt(Integer.toBinaryString(digit)))); + number /= 10; + } + return bcd.toString(); + } + + /** + * Converts a BCD string back to its decimal representation. + * @param bcd the BCD string to convert. + * @return the decimal number as an integer. + */ + public static int bcdToDecimal(String bcd) { + int decimal = 0; + for (int i = 0; i < bcd.length(); i += 4) { + String digitBinary = bcd.substring(i, i + 4); + decimal = decimal * 10 + Integer.parseInt(digitBinary, 2); + } + return decimal; + } +} diff --git a/src/test/java/com/thealgorithms/conversions/BCDConverterTest.java b/src/test/java/com/thealgorithms/conversions/BCDConverterTest.java new file mode 100644 index 000000000000..53ee7e356d94 --- /dev/null +++ b/src/test/java/com/thealgorithms/conversions/BCDConverterTest.java @@ -0,0 +1,20 @@ +package com.thealgorithms.conversions; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +public class BCDConverterTest { + + @Test + public void testDecimalToBCD() { + assertEquals("00010010", BCDConverter.decimalToBCD(12)); + assertEquals("001001000011", BCDConverter.decimalToBCD(243)); + } + + @Test + public void testBCDToDecimal() { + assertEquals(12, BCDConverter.bcdToDecimal("00010010")); + assertEquals(243, BCDConverter.bcdToDecimal("001001000011")); + } +} From 71b2569451e18bf025e87158bc211491ecbbadb5 Mon Sep 17 00:00:00 2001 From: Hardvan Date: Sun, 13 Oct 2024 03:22:41 +0000 Subject: [PATCH 2/5] Update directory --- DIRECTORY.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 30fa2cbee199..9485aea57f2b 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -25,9 +25,11 @@ * bitmanipulation * [BinaryPalindromeCheck](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/BinaryPalindromeCheck.java) * [BitSwap](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/BitSwap.java) + * [BooleanAlgebraGates](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/BooleanAlgebraGates.java) * [ClearLeftmostSetBit](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/ClearLeftmostSetBit.java) * [CountLeadingZeros](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/CountLeadingZeros.java) * [CountSetBits](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/CountSetBits.java) + * [FindNthBit](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/FindNthBit.java) * [GrayCodeConversion](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/GrayCodeConversion.java) * [HammingDistance](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/HammingDistance.java) * [HigherLowerPowerOfTwo](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/HigherLowerPowerOfTwo.java) @@ -54,6 +56,7 @@ * [CompositeLFSR](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/ciphers/a5/CompositeLFSR.java) * [LFSR](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/ciphers/a5/LFSR.java) * [Utils](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/ciphers/a5/Utils.java) + * [ADFGVXCipher](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/ciphers/ADFGVXCipher.java) * [AES](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/ciphers/AES.java) * [AESEncryption](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/ciphers/AESEncryption.java) * [AffineCipher](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/ciphers/AffineCipher.java) @@ -77,6 +80,7 @@ * [AnyBaseToAnyBase](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/conversions/AnyBaseToAnyBase.java) * [AnyBaseToDecimal](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/conversions/AnyBaseToDecimal.java) * [AnytoAny](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/conversions/AnytoAny.java) + * [BCDConverter](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/conversions/BCDConverter.java) * [BinaryToDecimal](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/conversions/BinaryToDecimal.java) * [BinaryToHexadecimal](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/conversions/BinaryToHexadecimal.java) * [BinaryToOctal](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/conversions/BinaryToOctal.java) @@ -133,6 +137,7 @@ * [FordFulkerson](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/datastructures/graphs/FordFulkerson.java) * [Graphs](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/datastructures/graphs/Graphs.java) * [HamiltonianCycle](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/datastructures/graphs/HamiltonianCycle.java) + * [JohnsonsAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/datastructures/graphs/JohnsonsAlgorithm.java) * [KahnsAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/datastructures/graphs/KahnsAlgorithm.java) * [Kosaraju](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/datastructures/graphs/Kosaraju.java) * [Kruskal](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/datastructures/graphs/Kruskal.java) @@ -340,6 +345,7 @@ * [EulersFunction](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/maths/EulersFunction.java) * [Factorial](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/maths/Factorial.java) * [FactorialRecursion](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/maths/FactorialRecursion.java) + * [FastExponentiation](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/maths/FastExponentiation.java) * [FastInverseSqrt](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/maths/FastInverseSqrt.java) * [FFT](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/maths/FFT.java) * [FFTBluestein](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/maths/FFTBluestein.java) @@ -656,9 +662,11 @@ * bitmanipulation * [BinaryPalindromeCheckTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/BinaryPalindromeCheckTest.java) * [BitSwapTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/BitSwapTest.java) + * [BooleanAlgebraGatesTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/BooleanAlgebraGatesTest.java) * [ClearLeftmostSetBitTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/ClearLeftmostSetBitTest.java) * [CountLeadingZerosTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/CountLeadingZerosTest.java) * [CountSetBitsTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/CountSetBitsTest.java) + * [FindNthBitTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/FindNthBitTest.java) * [GrayCodeConversionTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/GrayCodeConversionTest.java) * [HammingDistanceTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/HammingDistanceTest.java) * [HigherLowerPowerOfTwoTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/HigherLowerPowerOfTwoTest.java) @@ -682,6 +690,7 @@ * [A5CipherTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/ciphers/a5/A5CipherTest.java) * [A5KeyStreamGeneratorTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/ciphers/a5/A5KeyStreamGeneratorTest.java) * [LFSRTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/ciphers/a5/LFSRTest.java) + * [ADFGVXCipherTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/ciphers/ADFGVXCipherTest.java) * [AESEncryptionTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/ciphers/AESEncryptionTest.java) * [AffineCipherTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/ciphers/AffineCipherTest.java) * [AtbashTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/ciphers/AtbashTest.java) @@ -701,6 +710,7 @@ * conversions * [AffineConverterTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/conversions/AffineConverterTest.java) * [AnyBaseToDecimalTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/conversions/AnyBaseToDecimalTest.java) + * [BCDConverterTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/conversions/BCDConverterTest.java) * [BinaryToDecimalTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/conversions/BinaryToDecimalTest.java) * [BinaryToHexadecimalTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/conversions/BinaryToHexadecimalTest.java) * [BinaryToOctalTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/conversions/BinaryToOctalTest.java) @@ -750,6 +760,7 @@ * [FloydWarshallTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/graphs/FloydWarshallTest.java) * [FordFulkersonTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/graphs/FordFulkersonTest.java) * [HamiltonianCycleTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/graphs/HamiltonianCycleTest.java) + * [JohnsonsAlgorithmTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/graphs/JohnsonsAlgorithmTest.java) * [KosarajuTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/graphs/KosarajuTest.java) * [TarjansAlgorithmTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/graphs/TarjansAlgorithmTest.java) * [WelshPowellTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/graphs/WelshPowellTest.java) @@ -902,6 +913,7 @@ * [EulersFunctionTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/EulersFunctionTest.java) * [FactorialRecursionTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/FactorialRecursionTest.java) * [FactorialTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/FactorialTest.java) + * [FastExponentiationTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/FastExponentiationTest.java) * [FastInverseSqrtTests](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/FastInverseSqrtTests.java) * [FFTTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/FFTTest.java) * [FibonacciJavaStreamsTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/FibonacciJavaStreamsTest.java) From afce5ab128bd2a4677dc5d7de9b05e01807df3e6 Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Sun, 13 Oct 2024 09:02:46 +0530 Subject: [PATCH 3/5] Fix --- src/main/java/com/thealgorithms/conversions/BCDConverter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/thealgorithms/conversions/BCDConverter.java b/src/main/java/com/thealgorithms/conversions/BCDConverter.java index df4eb39056dc..c037139a42c6 100644 --- a/src/main/java/com/thealgorithms/conversions/BCDConverter.java +++ b/src/main/java/com/thealgorithms/conversions/BCDConverter.java @@ -25,7 +25,7 @@ public static String decimalToBCD(int number) { StringBuilder bcd = new StringBuilder(); while (number > 0) { int digit = number % 10; - bcd.insert(0, String.format("%04d", Integer.parseInt(Integer.toBinaryString(digit)))); + bcd.insert(0, String.format("%04d", Integer.parseInt(Integer.toString(digit, 2)))); number /= 10; } return bcd.toString(); From 68b91ce2b2611700ea94d748dfb58db5bc872c51 Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Sun, 13 Oct 2024 09:07:49 +0530 Subject: [PATCH 4/5] Fix --- .../conversions/BCDConverter.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/thealgorithms/conversions/BCDConverter.java b/src/main/java/com/thealgorithms/conversions/BCDConverter.java index c037139a42c6..49753663c7f0 100644 --- a/src/main/java/com/thealgorithms/conversions/BCDConverter.java +++ b/src/main/java/com/thealgorithms/conversions/BCDConverter.java @@ -25,12 +25,28 @@ public static String decimalToBCD(int number) { StringBuilder bcd = new StringBuilder(); while (number > 0) { int digit = number % 10; - bcd.insert(0, String.format("%04d", Integer.parseInt(Integer.toString(digit, 2)))); + bcd.insert(0, String.format("%04d", convertToBinary(digit))); number /= 10; } return bcd.toString(); } + /** + * Converts a single digit to its 4-bit binary representation. + * @param digit the digit to convert (0-9). + * @return the binary representation as an int. + */ + private static int convertToBinary(int digit) { + int binary = 0; + int multiplier = 1; + while (digit > 0) { + binary += (digit % 2) * multiplier; + digit /= 2; + multiplier *= 10; + } + return binary; + } + /** * Converts a BCD string back to its decimal representation. * @param bcd the BCD string to convert. From b749c38e34ae6620d8a61c312ad1fe3294b95bc6 Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Sun, 13 Oct 2024 09:15:00 +0530 Subject: [PATCH 5/5] Fix --- src/main/java/com/thealgorithms/conversions/BCDConverter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/thealgorithms/conversions/BCDConverter.java b/src/main/java/com/thealgorithms/conversions/BCDConverter.java index 49753663c7f0..d9ba4f066fd7 100644 --- a/src/main/java/com/thealgorithms/conversions/BCDConverter.java +++ b/src/main/java/com/thealgorithms/conversions/BCDConverter.java @@ -40,7 +40,7 @@ private static int convertToBinary(int digit) { int binary = 0; int multiplier = 1; while (digit > 0) { - binary += (digit % 2) * multiplier; + binary += digit % 2 * multiplier; digit /= 2; multiplier *= 10; }