aboutsummaryrefslogtreecommitdiff
path: root/Java/Number_Names/src/Program.java
diff options
context:
space:
mode:
Diffstat (limited to 'Java/Number_Names/src/Program.java')
-rw-r--r--Java/Number_Names/src/Program.java124
1 files changed, 124 insertions, 0 deletions
diff --git a/Java/Number_Names/src/Program.java b/Java/Number_Names/src/Program.java
new file mode 100644
index 0000000..ed9ef79
--- /dev/null
+++ b/Java/Number_Names/src/Program.java
@@ -0,0 +1,124 @@
+import java.util.ArrayList;
+import java.util.Scanner;
+
+public class Program {
+
+ public static String[] digits = {"", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
+ public static String[] teens = {"ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"};
+ public static String[] tens = {"ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"};
+
+ public static void main(String args[]){
+ //Used http://www.englishlessonsbrighton.co.uk/saying-large-numbers-english/ and https://www.grammarly.com/blog/hyphen-in-compound-numbers/
+ Scanner scn = new Scanner(System.in);
+
+ System.out.println("Number to British English text");
+ System.out.println("How to use: type a whole number, press enter and the program will say it's full proper name. Close the program to stop it.");
+ System.out.println("NOTE: Your numbers must be between 9223372036854775807 and –9223372036854775808 (any characters that are not numbers and - will result in error)");
+
+ while (true) {
+ try {
+ long n = Long.parseLong(scn.nextLine().trim());
+ System.out.println(NumberName(n));
+ } catch (Exception ex) {
+ System.out.println("ERROR: Please type a whole number between 2147483647 and -2147483648 (NOTE: any characters that are not numbers and - will result in this error)");
+ }
+ }
+ }
+
+ public static String NumberName(long num) {
+ StringBuilder name = new StringBuilder(num < 0 ? "negative " : "");
+ var number_parts = new ArrayList<Long>();
+
+ if (num == 0) return "zero";
+
+ while (num != 0) {
+ number_parts.add(Math.abs(num % 1000));
+ num /= 1000;
+ }
+
+ for (int i = number_parts.size() - 1; i > -1; i--){
+ long curr_num = number_parts.get(i);
+
+ if ((curr_num + "").length() == 3) {
+ name.append(SmallNumberName((int)curr_num / 100)).append(" hundred");
+
+ curr_num %= 100;
+ if (curr_num != 0) name.append(" and ");
+ }
+ name.append(SmallNumberName((int)curr_num));
+
+ switch (i) {
+ case 1:
+ if (number_parts.get(1) != 0) {
+ name.append(" thousand");
+
+ if (number_parts.get(0) != 0) {
+ if (number_parts.get(0) / 100 == 0) name.append(" and ");
+ else name.append(", ");
+ }
+ } break;
+
+ case 2:
+ if (number_parts.get(2) != 0) {
+ name.append(" million");
+
+ if (number_parts.get(0) != 0 || number_parts.get(1) != 0) {
+ if (number_parts.get(0) / 100 == 0) name.append(" and ");
+ else name.append(", ");
+ }
+ } break;
+
+ case 3:
+ if (number_parts.get(3) != 0) {
+ name.append(" milliard");
+
+ if (number_parts.get(0) != 0 || number_parts.get(1) != 0 || number_parts.get(2) != 0) {
+ if (number_parts.get(0) / 100 == 0) name.append(" and ");
+ else name.append(", ");
+ }
+ } break;
+ case 4:
+ if (number_parts.get(4) != 0) {
+ name.append(" billion");
+
+ if (number_parts.get(0) != 0 || number_parts.get(1) != 0 || number_parts.get(2) != 0 || number_parts.get(3) != 0) {
+ if (number_parts.get(0) / 100 == 0) name.append(" and ");
+ else name.append(", ");
+ }
+ } break;
+ case 5:
+ if (number_parts.get(5) != 0) {
+ name.append(" billiard");
+
+ if (number_parts.get(0) != 0 || number_parts.get(1) != 0 || number_parts.get(2) != 0 || number_parts.get(3) != 0 || number_parts.get(4) != 0) {
+ if (number_parts.get(0) / 100 == 0) name.append(" and ");
+ else name.append(", ");
+ }
+ } break;
+ case 6:
+ if (number_parts.get(6) != 0) {
+ name.append(" trillion");
+
+ if (number_parts.get(0) != 0 || number_parts.get(1) != 0 || number_parts.get(2) != 0 || number_parts.get(3) != 0 || number_parts.get(4) != 0 || number_parts.get(5) != 0) {
+ if (number_parts.get(0) / 100 == 0) name.append(" and ");
+ else name.append(", ");
+ }
+ } break;
+ }
+ }
+ return name.toString();
+ }
+
+ private static String SmallNumberName(int num) {
+ if (num < 20) {
+ try {
+ return digits[num];
+ } catch (Exception e) {
+ return teens[num % 10];
+ }
+ } else if (num < 100) {
+ return num % 10 == 0 ? tens[(num / 10) - 1] : tens[(num / 10) - 1] + "-" + SmallNumberName(num % 10);
+ }
+ return "ERR";
+ }
+} \ No newline at end of file