藍橋杯-基礎練習-數的讀法(Java)

寫了好久啊,我好菜啊

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        String number = scanner.nextLine();
        scanner.close();

        callNumber(number);
    }

    private static void callNumber(String text){
        String result;
        if(text.length() <= 4){
            result = lowerThan10000(text, true);
        } else if(text.length() <= 8){
            String n1 = text.substring(text.length() - 4, text.length());
            String n2 = text.substring(0, text.length() - 4);
            result = lowerThan10000(n2, true) + "wan ";
            result += lowerThan10000(n1, false);
        } else {
            String n1 = text.substring(text.length() - 4, text.length());
            String n2 = text.substring(text.length() - 8, text.length() - 4);
            String n3 = text.substring(0, text.length() - 8);
            result = lowerThan10000(n3, true) + "yi ";
            result += lowerThan10000(n2, false) + "wan ";
            result += lowerThan10000(n1, false);
        }
        System.out.println(result);
    }

    static String[] chineseNumbers = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu", "shi"};
    static String[] groups = {"ge", "shi", "bai", "qian", "wan", "yi"};

    private static String lowerThan10000(String text, boolean isStart){
        int length = text.length();
        int number = Integer.parseInt(text);
        if(length <= 1) {
            return chineseNumbers[number] + " ";
        } else if(text.startsWith("1") && length == 2 && isStart){
            if(text.equals("10")) return "shi ";
            return "shi " + chineseNumbers[number % 10] + " ";
        }

        int factor = (int) Math.pow(10, length - 1);
        int index = length - 1;
        boolean isLastZero = false;

        StringBuilder sBuilder = new StringBuilder();
        while (factor > 0){
            if(number == 0)
                break;

            int count = number / factor;
            number -= factor * count;
            factor /= 10;

            if(count == 0){
                if(!isLastZero) {
                    sBuilder.append(chineseNumbers[count] + " ");
                }
                isLastZero = true;
            } else{
                sBuilder.append(chineseNumbers[count] + " ");
                if(index > 0){
                    sBuilder.append(groups[index] + " ");
                }
                isLastZero = false;
            }

            index -= 1;
        }

        return sBuilder.toString();
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章