题解 | #学英语#

学英语

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

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) {
        BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
        String[] unit = new String[] {"and", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine",
                                      "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen",
                                      "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety", "hundred", "thousand", "million", "billion"
                                     };
        String a;
        StringBuilder ans = new StringBuilder();
        try {
            a = r.readLine();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        long n = 0;
        char[] chs = a.toCharArray();
        int i = 0, j, j1, k, inx, l = chs.length;
        boolean b = false, andFg =
                        true;//加and规则,百位为0,前面不加and,百位不为0,十位和个位有大于0的数,则加and,十位和个位之间不加and
        do {
            j = chs[i] - '0';
            k = (l - i - 1) % 3;
            if (k == 2) {
                inx = (l - i - 1) / 3;
                if (b) ans.append(unit[inx + 29]).append(" ");
                b = true;//最高位是否加thousand,million,billion
                if (j == 0) andFg = true;//百位为0,与十位、个位之间不加and
                else {
                    ans.append(unit[j]).append(" ").append(unit[28]).append(" ");
                    andFg = false;//百位不为0,加and
                }
                i++;
                continue;
            }
            b = true;
            if (!andFg &&
                    j != 0) ans.append(unit[0]).append(" ");//当前位不为0,且andFg为false,加and
            if (k == 1 && j == 1) {
                j1 = chs[i + 1] - '0';
                j1 += j * 10;
                ans.append(unit[j1]).append(" ");
                i += 2;//十位为1,跳过个位,到下一千位
                continue;
            } else if (k == 1 && j > 1) {
                andFg = true;//十位大于2,和个位之间不加and
                ans.append(unit[j + 18]).append(" ");
                i++;
                continue;
            }
            if (j != 0) ans.append(unit[j]).append(" ");//个位不为0,加入当前数字
            i++;
        } while (i < l);
        System.out.print(ans);
    }
}

全部评论

相关推荐

03-19 10:07
已编辑
广东药科大学 golang
Yki_:你倒是进一个面啊
点赞 评论 收藏
分享
04-13 18:10
门头沟学院 Java
想熬夜的小飞象在秋招:被腾讯挂了后爸妈以为我失联了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务