题解 | #学英语#

学英语

https://www.nowcoder.com/practice/1364723563ab43c99f3d38b5abef83bc

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static String match(int num) {
        switch (num) {
            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 14 :
                return "fourteen";
            case 15 :
                return "fifteen";
            case 16 :
                return "sixteen";
            case 17 :
                return "seventeen";
            case 18 :
                return "eighteen";
            case 19 :
                return "nineteen";
            case 20 :
                return "twenty";
            case 30 :
                return "thirty";
            case 40 :
                return "forty";
            case 50 :
                return "fifty";
            case 60 :
                return "sixty";
            case 70 :
                return "seventy";
            case 80 :
                return "eighty";
            case 90 :
                return "ninety";
            case 0 :
                return "";
        }
        return null;
    }
    public static String percent(int
                                 num) { // 用于匹配三位,返回三位数字的英文
        String num_2_eng = "";
        if (num >= 100) { // 获取百分位英文
            int percent_num = num / 100;
            num_2_eng = num_2_eng + match(percent_num) +
                        " hundred"; // 获取百分位英文表达
            num = num % 100;
            if (num != 0) { // 百分位下有余数,需要加上“and”
                num_2_eng = num_2_eng + " and ";
            } else { // 百分位下没有余数,可以直接结束
                return num_2_eng;
            }
        }
        // 获取百分位以下英文
        String ret_eng = match(num);
        if (ret_eng != null) { // 表示对应匹配,可以直接结束
            num_2_eng = num_2_eng + ret_eng;
        } else { // 未能匹配时,需要将十分位和个位分开匹配
            int ten_num = num / 10 * 10; // 十分位
            int one_num = num % 10; // 个位
            num_2_eng = num_2_eng + match(ten_num); // 获取十分位英文
            num_2_eng = num_2_eng + " " + match(one_num); // 获取个位英文
        }
        return num_2_eng;
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            String a = in.next();
            int v = Integer.parseInt(a);
            int v_h = 0;  // 用于保存高位,即每次去除低位后留下的高位(一次去除低位的三位)
            int v_l = v;  // 用于保存低位
            String a_2_eng = ""; // 保存对应的英文表达
            if (v_l >= 1000000) { //
                v_h = v_l / 1000000;
                a_2_eng = a_2_eng + percent(v_h) + " million";
                v_l = v_l % 1000000;
                if (v_l != 0) { // 有余数,需要加上" "
                    a_2_eng = a_2_eng + " ";
                }
            }
            if (v_l >= 1000) {
                v_h = v_l / 1000;
                a_2_eng = a_2_eng + percent(v_h) + " thousand";
                v_l = v_l % 1000;
                if (v_l != 0) { // 有余数,需要加上" "
                    a_2_eng = a_2_eng + " ";
                }
            }
            v_h = v_l / 1000;
            v_l = v_l % 1000;
            a_2_eng = a_2_eng + percent(v_l);
            System.out.println(a_2_eng);
        }
    }
}

#学习笔记#
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务