diff --git a/src/main/java/com/thealgorithms/conversions/DecimalToOctal.java b/src/main/java/com/thealgorithms/conversions/DecimalToOctal.java index 4bc3a6e7af8c..75687fc589ae 100644 --- a/src/main/java/com/thealgorithms/conversions/DecimalToOctal.java +++ b/src/main/java/com/thealgorithms/conversions/DecimalToOctal.java @@ -1,38 +1,38 @@ package com.thealgorithms.conversions; -import java.util.Scanner; - /** * This class converts Decimal numbers to Octal Numbers */ public final class DecimalToOctal { + private static final int OCTAL_BASE = 8; + private static final int INITIAL_OCTAL_VALUE = 0; + private static final int INITIAL_PLACE_VALUE = 1; + private DecimalToOctal() { } /** - * Main Method + * Converts a decimal number to its octal equivalent. * - * @param args Command line Arguments + * @param decimal The decimal number to convert. + * @return The octal equivalent as an integer. + * @throws IllegalArgumentException if the decimal number is negative. */ + public static int convertToOctal(int decimal) { + if (decimal < 0) { + throw new IllegalArgumentException("Decimal number cannot be negative."); + } + + int octal = INITIAL_OCTAL_VALUE; + int placeValue = INITIAL_PLACE_VALUE; - // enter in a decimal value to get Octal output - public static void main(String[] args) { - Scanner sc = new Scanner(System.in); - int n; - int k; - int d; - int s = 0; - int c = 0; - System.out.print("Decimal number: "); - n = sc.nextInt(); - k = n; - while (k != 0) { - d = k % 8; - s += d * (int) Math.pow(10, c++); - k /= 8; + while (decimal != 0) { + int remainder = decimal % OCTAL_BASE; + octal += remainder * placeValue; + decimal /= OCTAL_BASE; + placeValue *= 10; } - System.out.println("Octal equivalent:" + s); - sc.close(); + return octal; } } diff --git a/src/test/java/com/thealgorithms/conversions/DecimalToOctalTest.java b/src/test/java/com/thealgorithms/conversions/DecimalToOctalTest.java new file mode 100644 index 000000000000..7ff274f04800 --- /dev/null +++ b/src/test/java/com/thealgorithms/conversions/DecimalToOctalTest.java @@ -0,0 +1,21 @@ +package com.thealgorithms.conversions; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; + +class DecimalToOctalTest { + @ParameterizedTest + @CsvSource({"0, 0", "7, 7", "8, 10", "10, 12", "64, 100", "83, 123", "7026, 15562"}) + void testConvertToOctal(int decimal, int expectedOctal) { + assertEquals(expectedOctal, DecimalToOctal.convertToOctal(decimal)); + } + + @Test + void testConvertToOctalNegativeNumber() { + assertThrows(IllegalArgumentException.class, () -> DecimalToOctal.convertToOctal(-10)); + } +}