Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.cyecize.app;
- import java.util.Arrays;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.Scanner;
- public class StartUp {
- static final Map<Integer, String> numbersMapping = new HashMap<>() {{
- put(0, "Zero");
- put(1, "One");
- put(2, "Two");
- put(3, "Three");
- put(4, "Four");
- put(5, "Five");
- put(6, "Six");
- put(7, "Seven");
- put(8, "Eight");
- put(9, "Nine");
- put(10, "Ten");
- put(11, "Eleven");
- put(12, "Twelve");
- put(13, "Thirteen");
- put(14, "Fourteen");
- put(15, "Fifteen");
- put(16, "Sixteen");
- put(17, "Seventeen");
- put(18, "Eighteen");
- put(19, "Nineteen");
- put(20, "Twenty");
- put(30, "Thirty");
- put(40, "Forty");
- put(50, "Fifty");
- put(60, "Sixty");
- put(70, "Seventy");
- put(80, "Eighty");
- put(90, "Ninety");
- }};
- public static void main(String[] args) {
- Scanner scanner = new Scanner(System.in);
- while (true) {
- String line = scanner.nextLine();
- if ("end".equalsIgnoreCase(line)) break;
- int number = Integer.parseInt(line);
- System.out.println(spellNumber(number));
- }
- }
- static String spellNumber(Integer num) {
- if (num < 0) {
- return "Minus " + spellNumber(Math.abs(num));
- }
- if (numbersMapping.containsKey(num)) {
- return numbersMapping.get(num);
- }
- int numLength = num.toString().length();
- if (NumberSuffix.hasSuffix(numLength)) {
- NumberSuffix suffix = NumberSuffix.getSuffix(numLength);
- int numberChunk = num / suffix.division;
- int leftover = num % suffix.division;
- String numberName = spellNumber(numberChunk) + " " + suffix.suffix;
- if (leftover == 0) {
- return numberName;
- }
- if (leftover < 100 && num >= 100) {
- numberName += " and";
- }
- return numberName + " " + spellNumber(leftover);
- }
- //Code is only reachable for numbers in range from 21 to 99
- if (num > 99) {
- return "Number too big!";
- }
- int decimalRounded = num / 10 * 10;
- int leftover = num % 10;
- String numberName = spellNumber(decimalRounded);
- if (leftover == 0) {
- return numberName;
- }
- return numberName + " " + spellNumber(leftover);
- }
- static enum NumberSuffix {
- HUNDRED(List.of(3), "Hundred", 100),
- THOUSAND(List.of(4, 5, 6), "Thousand", 1000),
- MILLION(List.of(7), "Million", 1000000);
- final List<Integer> numLengths;
- final String suffix;
- final int division;
- NumberSuffix(List<Integer> numLengths, String suffix, int division) {
- this.numLengths = numLengths;
- this.suffix = suffix;
- this.division = division;
- }
- static NumberSuffix getSuffix(int numLength) {
- return Arrays.stream(values()).filter(val -> val.numLengths.contains(numLength)).findFirst().orElse(null);
- }
- static boolean hasSuffix(int numLenght) {
- return getSuffix(numLenght) != null;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement