题解 | #学英语#

学英语

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

import java.util.*;
import static java.lang.System.out;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        Map<Character,String> map1 = new HashMap<Character,String>(){{
            put('1',"one");
            put('2',"two");
            put('3',"three");
            put('4',"four");
            put('5',"five");
            put('6',"six");
            put('7',"seven");
            put('8',"eight");
            put('9',"nine");
            put('0',"");
        }};
        Map<Character,String> map2 = new HashMap<Character,String>(){{
            put('2',"twenty");
            put('3',"thirty");
            put('4',"forty");
            put('5',"fifty");
            put('6',"sixty");
            put('7',"seventy");
            put('8',"eighty");
            put('9',"ninety");
        }};
        Map<Character,String> map3 = new HashMap<Character,String>(){{
            put('0',"ten");
            put('1',"eleven");
            put('2',"twelve");
            put('3',"thirteen");
            put('4',"fourteen");
            put('5',"fifteen");
            put('6',"sixteen");
            put('7',"seventeen");
            put('8',"eighteen");
            put('9',"nineteen");
        }};
        //最多只有9位,那么将str分成三段放入list
        while(sc.hasNextLine()){
            ArrayList<String> list = new ArrayList<>();
            String str = sc.nextLine();
            String cur = "";
            int len = str.length();
            if(len >= 7 && len <= 9){
                cur = str.substring(0, len - 6);
                list.add(cur);
                str = str.substring(len - 6, len);
            }
            len = str.length();
            if(len >= 4 && len <= 6){
                cur = str.substring(0,len - 3);
                list.add(cur);
                str = str.substring(len - 3, len);
            }
            list.add(str);
            //逐一取出
            while(list.size() > 0){
                char[] c = list.remove(0).toCharArray();
                if(c.length == 3){//如果是3位
                    out.print(map1.get(c[0]));
                    if(c[0] != '0') out.print(" hundred");//第一个数字不是0,才有hundred
                    //处理后两位
                    if(c[1] != '0' || c[2] != '0'){//第二三位至少一个不为零
                        if(c[0] != '0') out.print(" and ");//且第一个数字不是0,才有and
                        //第二位为1,ten~nineteen
                        if(c[1] == '1') out.print(map3.get(c[2]));
                        //第二位为0第三位不为0
                        else if(c[1] == '0') out.print(map1.get(c[2]));
                        //第二位不为0和1,第三位为0,twenty~ninety
                        else if(c[2] == '0') out.print(map2.get(c[1]));
                        //第二位不为0和1,第三位不为0,多一个空格twenty one
                        else{
                            out.print(map2.get(c[1]));
                            out.print(" "+map1.get(c[2]));
                        }
                    }
                }
                if(c.length == 2){//如果是2位
                    if(c[0] == '1') out.print(map3.get(c[1]));
                    else if(c[1] == '0') out.print(map2.get(c[0]));
                    else{
                        out.print(map2.get(c[0]));
                        out.print(" "+map1.get(c[1]));
                    }
                }
                if(c.length == 1){//如果是1位
                    out.print(map1.get(c[0]));
                }
                if(list.size() == 2){//list还剩2段,说明当前单位是million
                    out.print(" million ");
                }else if(list.size() == 1)//list还剩1段,说明当前单位是thousand
                    out.print(" thousand ");
            }
            out.println();
        }
    }
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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