diff options
| -rw-r--r-- | Java/Beginer training/out/production/Beginer training/NumberName.class | bin | 0 -> 4015 bytes | |||
| -rw-r--r-- | Java/Beginer training/out/production/Beginer training/Training.class | bin | 893 -> 3505 bytes | |||
| -rw-r--r-- | Java/Beginer training/src/NumberName.java | 120 | ||||
| -rw-r--r-- | Java/Beginer training/src/Training.java | 80 |
4 files changed, 198 insertions, 2 deletions
diff --git a/Java/Beginer training/out/production/Beginer training/NumberName.class b/Java/Beginer training/out/production/Beginer training/NumberName.class Binary files differnew file mode 100644 index 0000000..0bf8239 --- /dev/null +++ b/Java/Beginer training/out/production/Beginer training/NumberName.class diff --git a/Java/Beginer training/out/production/Beginer training/Training.class b/Java/Beginer training/out/production/Beginer training/Training.class Binary files differindex 659ebce..9bc5125 100644 --- a/Java/Beginer training/out/production/Beginer training/Training.class +++ b/Java/Beginer training/out/production/Beginer training/Training.class diff --git a/Java/Beginer training/src/NumberName.java b/Java/Beginer training/src/NumberName.java new file mode 100644 index 0000000..34f735c --- /dev/null +++ b/Java/Beginer training/src/NumberName.java @@ -0,0 +1,120 @@ +import java.util.ArrayList; +import java.math.*; +import java.util.Scanner; + +public class NumberName { + 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 2147483647 and -2147483648 (any characters that are not numbers and - will result in error)"); + + while (true) { + try { + int n = Integer.parseInt(scn.nextLine().trim()); + System.out.println(NameOfNumber(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 NameOfNumber(int num) { + StringBuilder name = new StringBuilder(num < 0 ? "negative " : ""); + var number_parts = new ArrayList<Integer>(); + + while (num != 0) { + number_parts.add(Math.abs(num % 1000)); + num /= 1000; + } + + for (int i = number_parts.size() - 1; i > -1; i--){ + int curr_num = number_parts.get(i); + + if ((curr_num + "").length() == 3) { + name.append(SmallNumName(curr_num / 100)).append(" hundred"); + + curr_num %= 100; + if (curr_num != 0) name.append(" and "); + } + name.append(SmallNumName(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(1) / 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(2) / 100 == 0) name.append(" and "); + else name.append(", "); + } + } break; + } + } + return name.toString(); + } + + private static String SmallNumName(int num) { + int part = 1; + switch (num) { + case 0: return ""; + case 1: return "one"; + case 2: return "two"; + case 3: return "three"; + case 4: return "four"; + case 5: return "five"; + case 6: return "six"; + case 7: return "seven"; + case 8: return "eight"; + case 9: return "nine"; + + case 10: return "ten"; + case 11: return "eleven"; + case 12: return "twelve"; + case 13: return "thirteen"; + case 15: return "fifteen"; + case 18: return "eighteen"; + case 14: part = 4; + case 16: if (part == 1) part = 6; + case 17: if (part == 1) part = 7; + case 19: if (part == 1) part = 9; + return SmallNumName(part) + "teen"; + } + + if (num > 19 && num < 100) { + int f_digit = num / 10; + StringBuilder name = new StringBuilder(); + + switch (f_digit) { + case 2: name.append("twenty"); break; + case 3: name.append("thirty"); break; + case 4: name.append("forty"); break; + case 5: name.append("fifty"); break; + case 8: name.append("eighty"); break; + + default: name.append(SmallNumName(f_digit)).append("ty"); break; + } + return num % 10 != 0 ? name + "-" + SmallNumName(num % 10) : name.toString(); + } + return "ERR"; + } +} diff --git a/Java/Beginer training/src/Training.java b/Java/Beginer training/src/Training.java index 95886d0..7fb6ca6 100644 --- a/Java/Beginer training/src/Training.java +++ b/Java/Beginer training/src/Training.java @@ -1,8 +1,84 @@ -import java.io.*; +import java.util.ArrayList; +import java.math.*; public class Training { public static void main(String args[]){ - PrintFibonacci(7); + //PrintFibonacci(7); + System.out.println(NumberName(6783508)); + } + + public static String NumberName(int num) { + StringBuilder name = new StringBuilder(num < 0 ? "negative " : ""); + var number_parts = new ArrayList<Integer>(); + + while (num != 0) { + number_parts.add(Math.abs(num % 1000)); + num /= 1000; + } + + for (int i = number_parts.size() - 1; i > -1; i--){ + int curr_num = number_parts.get(i); + + if ((curr_num + "").length() == 3) { + name.append(SmallNumName(curr_num / 100)).append(" hundred "); + + curr_num %= 100; + if (curr_num / 10 == 0) name.append("and "); + } + name.append(SmallNumName(curr_num)); + + switch (i) { + case 1: name.append(" thousand "); break; + case 2: name.append(" million "); break; + case 3: name.append(" milliard "); break; + } + } + return name.toString(); + } + + private static String SmallNumName(int num) { + int part = 1; + switch (num) { + case 0: return ""; + case 1: return "one"; + case 2: return "two"; + case 3: return "three"; + case 4: return "four"; + case 5: return "five"; + case 6: return "six"; + case 7: return "seven"; + case 8: return "eight"; + case 9: return "nine"; + + case 10: return "ten"; + case 11: return "eleven"; + case 12: return "twelve"; + case 13: return "thirteen"; + case 15: return "fifteen"; + case 18: return "eighteen"; + case 14: part = 4; + case 16: if (part == 1) part = 6; + case 17: if (part == 1) part = 7; + case 19: if (part == 1) part = 9; + return SmallNumName(part) + "teen"; + } + + if (num > 20 && num < 100) { + int f_digit = num / 10; + StringBuilder name = new StringBuilder(); + + switch (f_digit) { + case 2: name.append("twenty "); break; + case 3: name.append("thirty "); break; + case 5: name.append("fifty "); break; + case 8: name.append("eighty "); break; + + default: name.append(SmallNumName(f_digit)).append("ty "); break; + } + + return name + SmallNumName(num % 10); + } + return "ERR"; } public static void PrintFibonacci (int length) { |
