aboutsummaryrefslogtreecommitdiff
path: root/Java/Beginer training/src/NumberName.java
diff options
context:
space:
mode:
authorSyndamia <kami02882@gmail.com>2019-07-29 15:55:43 +0300
committerSyndamia <kami02882@gmail.com>2019-07-29 15:55:43 +0300
commitfa8afba66b94af7609494fa83371954cea380c0d (patch)
tree8acd24a11b5a8c403b9f3a43b391972b5d1382b2 /Java/Beginer training/src/NumberName.java
parent2c7ce57dac44ebcbe35d79fb36d79ea716d009a2 (diff)
downloadSelf-learning-fa8afba66b94af7609494fa83371954cea380c0d.tar
Self-learning-fa8afba66b94af7609494fa83371954cea380c0d.tar.gz
Self-learning-fa8afba66b94af7609494fa83371954cea380c0d.zip
Did (unofficially) the Number Names project from karan/Projects (under the name NumberName) in Java
Diffstat (limited to 'Java/Beginer training/src/NumberName.java')
-rw-r--r--Java/Beginer training/src/NumberName.java120
1 files changed, 120 insertions, 0 deletions
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";
+ }
+}