题解 | #学英语#循环读取低三位,写入数的时候从低位往高位写,读数的时候从高位往低位读

学英语

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

1、小于20的直接读数,如果个位和十位是0,则不需要读数(正百的100,例:one hundred);如果有百位读取百位,如果个位和十位是0,则不需要加and,否则需要加and,加hubdred,加百位 2、大于20的,依次添加个位,十位,百位;添加百位的时候,先加and,加hundred,加百位

import java.util.*;
public class Main {
     public static void main(String[] args){
         Scanner in = new Scanner(System.in);
         String[] NUMS = {"zero", "one", "two", "three", "four", "five", "six", "seven",
                         "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen",
                         "fifteen", "sixteen", "seventeen", "eighteen", "nineteen", "twenty"};
         String[] NUMSSHI = {"zero", "ten", "twenty", "thirty", "forty", "fifty",
                            "sixty", "seventy", "eighty", "ninety"};
         String[] POWER = {"", "hundred", "thousand", "million", "billion"};
         while(in.hasNext()){
             String line = in.nextLine();
             StringBuilder sb = new StringBuilder();
             ArrayList<String> lists = new ArrayList<>();
             if(!line.matches("\\d+")){//如果匹配的不是数字
                 System.out.println("error");
             }
             int linenum = Integer.parseInt(line);
             int power = 1;//单位
             while(linenum != 0){
                 if(power != 1){
                     lists.add(POWER[power]);//添加单位
                 }
                 int t = linenum % 1000;//取低三位
                 //注意小于20,直接读
                 if(t % 100 <= 20){
                     if(t % 100 != 0){//十位和个位是零的话就不需要读数了
                         lists.add(NUMS[t % 100]);
                     }
                     if(t / 100 != 0){//有百位
                         if(t % 100 != 0){//十位和个位是零的话就不需要添加and了
                             lists.add("and");
                         }
                         lists.add("hundred");
                         lists.add(NUMS[t / 100]);
                     }
                 }else{//大于20
                     // 有个位
                     if(t % 10 != 0){
                         lists.add(NUMS[t % 10]);
                     }
                     t /= 10;
                     // 有十位
                     if(t % 10 != 0){
                         lists.add(NUMSSHI[t % 10]);
                     }
                     t /= 10;
                     // 有百位
                     if(t % 10 != 0){
                         lists.add("and");
                         lists.add("hundred");
                         lists.add(NUMS[t % 10]);
                     }
                 }
                 linenum /= 1000;//每次缩小1000倍
                 power++;//单位*1000
             }
             //添加的时候,先添加低位,读数的时候先读高位,倒着读
             for(int i = lists.size() - 1; i >= 0; i--){
                 if(i!=0){
                     sb.append(lists.get(i) + " ");
                 }else{
                     sb.append(lists.get(i));//最后一个不加空格
                 }
             }
             System.out.println(sb.toString());
         }
     }   
}
全部评论
牛逼
点赞
送花
回复 分享
发布于 2022-10-10 17:08 北京
你这英语单词错误太多了吧 NUMS 数组好多错误
点赞
送花
回复 分享
发布于 2022-11-15 16:42 陕西
蔚来
校招火热招聘中
官网直投
6
点赞
送花
回复 分享
发布于 2023-02-06 15:18 北京
把line转化成数值的时候是不是应该用parseLong呢?
点赞
送花
回复 分享
发布于 2023-03-07 09:42 海南
🐂
点赞
送花
回复 分享
发布于 2023-04-16 18:54 重庆
我觉得这题难点是英语单词,不小心某个单词漏个字母就头疼。
点赞
送花
回复 分享
发布于 2023-05-01 17:51 广西

相关推荐

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