题解 | #学英语#

学英语

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

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextLong()) { 
            long num = in.nextLong();
            if (num > 999) {
                String out = getNumEngExp(num);
                if(out.endsWith(" and ")) {
                    System.out.println(out.substring(0, out.length()-4));
                } else {
                    System.out.println(out);
                }
                
            } else {
                String out = num1To999(num);
                if(out.endsWith(" and ")) {
                    System.out.println(out.substring(0, out.length()-4));
                } else {
                    System.out.println(out);
                }
            }
        }
    }

    public static String num1To19(long num) {
        if (num < 1 || num > 19) {
            return "";
        }
        String[] names = {
                "one ", "two ", "three ", "four ", "five ", "six ", "seven ", "eight ","nine ",
                "ten ", "eleven ", "twelve ", "thirteen ", "fourteen ", "fifteen ", "sixteen ", "seventeen ",
                "eighteen ", "nineteen "
        };
        return names[(int)num-1];
    }

    public static String num1To99(long num) {
        if (num < 1 || num > 99) {
            return "";
        }
        if (num < 20) {
            return num1To19(num);
        }
        long high = num /10;
        String[] tyNames = {
                "twenty ", "thirty ", "forty ", "fifty ", "sixty ",
                "seventy ", "eighty ", "ninety "
        };
        return tyNames[(int)high-2] + num1To19(num % 10);
    }

    public static String num1To999(long num) {
        if (num < 1 || num > 999) {
            return "";
        }
        if (num < 100) {
            return num1To99(num);
        }
        long high = num /100;
        return num1To19(high) + "hundred and " + num1To99(num % 100);
    }

    public static String getNumEngExp(long num) {
        if (num == 0) {
            return "zero";
        }
        String res = "";
        if (num < 0) {
            res = "negative, ";
        }
        if (num == Long.MIN_VALUE) {
            res += "two billion, ";
            num %= -2 * 1000 * 1000 * 1000;
        }
        num = Math.abs(num);
        long high = 1 * 1000 * 1000 * 1000;
        int highIndex = 0;
        String[] names = {"billion", "million", "thousand"};
        while (num != 0) {
            long cur = num / high;
            num %= high;
            if (cur != 0) {
                res += num1To999(cur);
                if (highIndex < 3) {
                    res += names[highIndex] + " ";
                }
            }
            high /= 1000;
            highIndex++;
        }
        return res;
    }
}

全部评论

相关推荐

09-30 15:27
已编辑
成都工业学院 企业文化
Morpheus_:候选人:还需要测验武力值?
投递腾讯等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务