diff --git a/java/sum/Sum.java b/java/sum/Sum.java
new file mode 100644
index 0000000..ef35486
--- /dev/null
+++ b/java/sum/Sum.java
@@ -0,0 +1,28 @@
+package sum;
+
+/**
+ * @author Nikita Doschennikov (me@fymio.us)
+ */
+public class Sum {
+
+ public static void main(String[] args) {
+ int res = 0;
+ for (String arg : args) {
+ StringBuilder builder = new StringBuilder();
+ for (char c : arg.toCharArray()) {
+ if (!Character.isWhitespace(c)) {
+ builder.append(c);
+ } else {
+ res += (!builder.toString().isEmpty())
+ ? Integer.parseInt(builder.toString())
+ : 0;
+ builder = new StringBuilder();
+ }
+ }
+ res += (!builder.toString().isEmpty())
+ ? Integer.parseInt(builder.toString())
+ : 0;
+ }
+ System.out.println(res);
+ }
+}
diff --git a/java/sum/SumBigDecimalHex.java b/java/sum/SumBigDecimalHex.java
new file mode 100644
index 0000000..6c50146
--- /dev/null
+++ b/java/sum/SumBigDecimalHex.java
@@ -0,0 +1,63 @@
+package sum;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
+/**
+ * @author Nikita Doschennikov (me@fymio.us)
+ */
+public class SumBigDecimalHex {
+
+ public static void main(String[] args) {
+ BigDecimal res = new BigDecimal("0");
+ for (String arg : args) {
+ StringBuilder builder = new StringBuilder();
+ int idxOfS = -1;
+ for (char c : arg.toCharArray()) {
+ if (!Character.isWhitespace(c)) {
+ if (c == 's' || c == 'S') {
+ idxOfS = builder.length();
+ }
+ builder.append(c);
+ } else {
+ res = res.add(compute(builder.toString(), idxOfS));
+ idxOfS = -1;
+ builder = new StringBuilder();
+ }
+ }
+ res = res.add(compute(builder.toString(), idxOfS));
+ }
+ System.out.println(res);
+ }
+
+ static BigDecimal compute(String num, int idxOfS) {
+ BigDecimal res = BigDecimal.ZERO;
+
+ if (num == null || num.isEmpty()) {
+ return res;
+ } else if (num.startsWith("0x") || num.startsWith("0X")) {
+ num = num.toLowerCase();
+ num = num.substring(2);
+ if (idxOfS != -1) {
+ idxOfS -= 2;
+ String mantissaHex = num.substring(0, idxOfS);
+ String exponentHex = num.substring(idxOfS + 1);
+
+ BigInteger mantissa = new BigInteger(mantissaHex, 16);
+ BigInteger exponent = new BigInteger(exponentHex, 16);
+
+ res = res.add(
+ new BigDecimal(mantissa).scaleByPowerOfTen(
+ exponent.negate().intValueExact()
+ )
+ );
+ } else {
+ res = res.add(new BigDecimal(new BigInteger(num, 16)));
+ }
+ } else {
+ res = new BigDecimal(num);
+ }
+
+ return res;
+ }
+}
diff --git a/java/sum/SumBigIntegerOctal.java b/java/sum/SumBigIntegerOctal.java
new file mode 100644
index 0000000..b65b35b
--- /dev/null
+++ b/java/sum/SumBigIntegerOctal.java
@@ -0,0 +1,45 @@
+package sum;
+
+import java.math.BigInteger;
+
+/**
+ * @author Nikita Doschennikov (me@fymio.us)
+ */
+public class SumBigIntegerOctal {
+
+ public static void main(String[] args) {
+ BigInteger res = new BigInteger("0");
+ for (String arg : args) {
+ StringBuilder builder = new StringBuilder();
+ for (char c : arg.toCharArray()) {
+ if (!Character.isWhitespace(c)) {
+ builder.append(c);
+ } else {
+ res = res.add(compute(builder.toString()));
+
+ builder = new StringBuilder();
+ }
+ }
+ res = res.add(compute(builder.toString()));
+ }
+ System.out.println(res);
+ }
+
+ static BigInteger compute(String num) {
+ BigInteger res = new BigInteger("0");
+ int numLength = num.length();
+ if (num.isEmpty()) {
+ res = res.add(BigInteger.ZERO);
+ } else if (
+ num.charAt(numLength - 1) == 'o' || num.charAt(numLength - 1) == 'O'
+ ) {
+ res = res.add(
+ new BigInteger(num.substring(0, num.length() - 1), 8)
+ );
+ } else {
+ res = res.add(new BigInteger(num));
+ }
+
+ return res;
+ }
+}
diff --git a/java/sum/SumDouble.java b/java/sum/SumDouble.java
new file mode 100644
index 0000000..57fb236
--- /dev/null
+++ b/java/sum/SumDouble.java
@@ -0,0 +1,28 @@
+package sum;
+
+/**
+ * @author Nikita Doschennikov (me@fymio.us)
+ */
+public class SumDouble {
+
+ public static void main(String[] args) {
+ double res = 0.0;
+ for (String arg : args) {
+ StringBuilder builder = new StringBuilder();
+ for (char c : arg.toCharArray()) {
+ if (!Character.isWhitespace(c)) {
+ builder.append(c);
+ } else {
+ res += (!builder.toString().isEmpty())
+ ? Double.parseDouble(builder.toString())
+ : 0;
+ builder = new StringBuilder();
+ }
+ }
+ res += (!builder.toString().isEmpty())
+ ? Double.parseDouble(builder.toString())
+ : 0;
+ }
+ System.out.println(res);
+ }
+}
diff --git a/java/sum/package-info.java b/java/sum/package-info.java
new file mode 100644
index 0000000..d4d2abc
--- /dev/null
+++ b/java/sum/package-info.java
@@ -0,0 +1,7 @@
+/**
+ * Tests for Sum homework
+ * of Introduction to Programming course.
+ *
+ * @author Georgiy Korneev (kgeorgiy@kgeorgiy.info)
+ */
+package sum;