From bcf4b617bb77d2801a1a6217df47832fa12754af Mon Sep 17 00:00:00 2001 From: lq Date: Sat, 25 Aug 2018 14:21:01 +0800 Subject: [PATCH 1/2] add a Test --- .../java/conversions/AnyBaseToDecimal.java | 39 +++++++++++++++++++ .../conversions/AnyBaseToDecimalTest.java | 39 +++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 src/main/com/java/conversions/AnyBaseToDecimal.java create mode 100644 src/test/com/java/conversions/AnyBaseToDecimalTest.java diff --git a/src/main/com/java/conversions/AnyBaseToDecimal.java b/src/main/com/java/conversions/AnyBaseToDecimal.java new file mode 100644 index 000000000000..dc78bf84b223 --- /dev/null +++ b/src/main/com/java/conversions/AnyBaseToDecimal.java @@ -0,0 +1,39 @@ +package src.main.com.java.conversions; + +public class AnyBaseToDecimal { + /** + * This method produces a decimal value of any given input number of any base + * @param inpNum String of which we need the decimal value and base in integer format + * @return string format of the decimal value + */ + + public String convertToDecimal(String inpNum, int base) { + int len = inpNum.length(); + int num = 0; + int pow = 1; + + for (int i=len-1; i>=0; i--) { + if (valOfChar(inpNum.charAt(i)) >= base) { + return "Invalid Number"; + } + num += valOfChar(inpNum.charAt(i))*pow; + pow *= base; + } + return String.valueOf(num); + } + + /** + * This method produces integer value of the input character and returns it + * @param c Char of which we need the integer value of + * @return integer value of input char + */ + + private static int valOfChar(char c) { + if (c >= '0' && c <= '9') { + return (int)c - '0'; + } + else { + return (int)c - 'A' + 10; + } + } +} \ No newline at end of file diff --git a/src/test/com/java/conversions/AnyBaseToDecimalTest.java b/src/test/com/java/conversions/AnyBaseToDecimalTest.java new file mode 100644 index 000000000000..12ff76b3defe --- /dev/null +++ b/src/test/com/java/conversions/AnyBaseToDecimalTest.java @@ -0,0 +1,39 @@ +package src.test.com.java.conversions; + +import org.junit.Assert; +import org.junit.Test; +import src.main.com.java.conversions.AnyBaseToDecimal; + +public class AnyBaseToDecimalTest { + + @Test + public void testAnyBaseToDecimal() { + AnyBaseToDecimal anyBaseToDecimal = new AnyBaseToDecimal(); + Assert.assertEquals("Invalid Number", anyBaseToDecimal.convertToDecimal("2", 2)); + Assert.assertEquals("Invalid Number", anyBaseToDecimal.convertToDecimal("3", 2)); + Assert.assertEquals("3", anyBaseToDecimal.convertToDecimal("11", 2)); + Assert.assertEquals("4", anyBaseToDecimal.convertToDecimal("100", 2)); + Assert.assertEquals("5", anyBaseToDecimal.convertToDecimal("101", 2)); + Assert.assertEquals("10", anyBaseToDecimal.convertToDecimal("1010", 2)); + Assert.assertEquals("1024", anyBaseToDecimal.convertToDecimal("10000000000", 2)); + + Assert.assertEquals("Invalid Number", anyBaseToDecimal.convertToDecimal("8", 8)); + Assert.assertEquals("Invalid Number", anyBaseToDecimal.convertToDecimal("9", 8)); + Assert.assertEquals("7", anyBaseToDecimal.convertToDecimal("7", 8)); + Assert.assertEquals("8", anyBaseToDecimal.convertToDecimal("10", 8)); + Assert.assertEquals("9", anyBaseToDecimal.convertToDecimal("11", 8)); + Assert.assertEquals("10", anyBaseToDecimal.convertToDecimal("12", 8)); + Assert.assertEquals("1024", anyBaseToDecimal.convertToDecimal("2000", 8)); + + Assert.assertEquals("Invalid Number", anyBaseToDecimal.convertToDecimal("A", 10)); + Assert.assertEquals("10", anyBaseToDecimal.convertToDecimal("10", 10)); + Assert.assertEquals("1024", anyBaseToDecimal.convertToDecimal("1024", 10)); + + Assert.assertEquals("Invalid Number", anyBaseToDecimal.convertToDecimal("G", 16)); + Assert.assertEquals("16", anyBaseToDecimal.convertToDecimal("10", 16)); + Assert.assertEquals("17", anyBaseToDecimal.convertToDecimal("11", 16)); + Assert.assertEquals("100", anyBaseToDecimal.convertToDecimal("64", 16)); + Assert.assertEquals("225", anyBaseToDecimal.convertToDecimal("e1", 16)); + Assert.assertEquals("1024", anyBaseToDecimal.convertToDecimal("400", 16)); + } +} From d9c46396d8637974ba5cf1bf9d9b3d74477f1396 Mon Sep 17 00:00:00 2001 From: lq Date: Sat, 25 Aug 2018 14:37:07 +0800 Subject: [PATCH 2/2] add a Test --- src/test/com/java/conversions/AnyBaseToDecimalTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/com/java/conversions/AnyBaseToDecimalTest.java b/src/test/com/java/conversions/AnyBaseToDecimalTest.java index 12ff76b3defe..54d98fc3c7e5 100644 --- a/src/test/com/java/conversions/AnyBaseToDecimalTest.java +++ b/src/test/com/java/conversions/AnyBaseToDecimalTest.java @@ -33,7 +33,7 @@ public void testAnyBaseToDecimal() { Assert.assertEquals("16", anyBaseToDecimal.convertToDecimal("10", 16)); Assert.assertEquals("17", anyBaseToDecimal.convertToDecimal("11", 16)); Assert.assertEquals("100", anyBaseToDecimal.convertToDecimal("64", 16)); - Assert.assertEquals("225", anyBaseToDecimal.convertToDecimal("e1", 16)); + Assert.assertEquals("225", anyBaseToDecimal.convertToDecimal("E1", 16)); Assert.assertEquals("1024", anyBaseToDecimal.convertToDecimal("400", 16)); } }