题解 | #学英语#

学英语

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;
    }
}

全部评论

相关推荐

2025-12-12 19:01
南京航空航天大学 C++
秋招没咋投,准备&nbsp;wxg&nbsp;转正之后摆烂了。结果不堪字节&nbsp;HR&nbsp;的骚扰还是面了一下字节。之前想去字节的时候怎么面都挂。现在想着随便面一下结果三面技术面都意外顺利还有加面。十月中旬字节发了意向,wxg&nbsp;转正结果无响应。十月底字节拉了保温群,wxg&nbsp;口头通过,系统显示考核中。十一月初和字节&nbsp;ld&nbsp;交流之后得知&nbsp;base&nbsp;居然能选海外,甚至能小&nbsp;wlb&nbsp;一下,wxg&nbsp;无响应无人联系。十一月中旬把字节&nbsp;base&nbsp;转到了海外,wxg&nbsp;流程灰了,一问超时忘处理了,过两天又变考核中了。十一月下旬字节换了海外&nbsp;HR&nbsp;对接,问了期望薪资,wxg&nbsp;考核终于显示通过,无&nbsp;HR&nbsp;保温,无其他保温。十一月底给字节报了个天价,想吓吓他们,同时告诉微信字节要开了,微信无响应。同样十一月底字节&nbsp;HR&nbsp;告诉我确实给不到那么高,但是能拿期权补上,问能不能接受。微信无响应。同样十一月底字节&nbsp;HR&nbsp;告知了具体方案,符合预期。&nbsp;微信无响应。十二月上旬催&nbsp;wxg&nbsp;不开我就盲拒了,wxg&nbsp;HR&nbsp;火急火燎的打电话问情况,问期望。我给了一个不算夸张的总包数字,因为今年市场在涨,过了三天还不联系我,我再催,约时间下午打电话,非得在我给出的数字上压下去几万,微信又不差这点,为什么不能满足我,让我没有拒绝的理由呢?一番纠结抗争,求稳还是追求挑战,最终选择接受迎接新的挑战,因为堂吉诃德永远不会停下脚步!回想起来,在&nbsp;wxg&nbsp;谈薪的阶段,我认为并没有给予我一定的重视,即使&nbsp;HR&nbsp;表示我在实习期间的表现和之前的面评都很靠前。也没有感觉到想要争取我,虽然我表示拒了&nbsp;offer&nbsp;之后要给我加面委定&nbsp;t6&nbsp;再涨,但我三个月没面试让我面面委那就是白给,还是算了。有缘再见了我亲爱的&nbsp;wxg,再见了曾经的梦中情厂,再见亲爱的&nbsp;mt,再见亲爱的朋友们。也再见,北京的一切。我想润了。秋招结束,卸载牛客,下一个三年,下一个五年,下一个十年后再来看看。
面试中的大熊猫爱吃薯...:我嫉妒得狗眼通红
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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