阿里内推笔试测评题,求大神指点

同学们,在阿里内部的智能应用里面有一种智能应用叫TTS。就是将文本转成语音输出,在我们的天猫精灵和阿里客服的智能IVR中应用广泛。
在做朗读的时候经常会碰到文本中有阿拉伯的数字需要转成中文的方式进行朗读。
比如说 1000,就需要朗读成 一千
比如说 10002,就需要朗读成 一万零二
比如说 3001111,需要朗读成 三百万一千一百一十一
当数字比较大的时候,我们希望能够朗读的更人性化一些,会在中间稍微停顿一下。
比如说刚才的300 1111,我们希望朗读成 三百万,一千一百一十一
比如说1682 1234 5678,我们希望朗读成 一千六百八十二亿,一千二百三十四万,五千六百七十八
通过 中文逗号 来表达一个停顿,根据朗读习惯,一次性朗读的中文数字最好不要大于8个字,否则就建议增加一个停顿。
所以 10002,就不需要停顿,直接读:一万零二
但是 11234,就需要停顿一下,变成:一万,一千二百三十四
希望同学们能实现这样一个转换的方法,将阿拉伯数字转换成中文,同时还能考虑到朗读的停顿体验。
ps:阿拉伯数字对应的中文参考表为:
零一二三四五六七***十
千百万亿
ps:假定我们的数字不超过一万亿


我的算法只有10%:
public static String readNum(long NUM){
        String s=Long.toString(NUM);
        String[] unitStrings={"","十","百","千","万","十","百","千","亿","十"};
        String[] num={"零","一","二","三","四","五","六","七","八","九"};
        StringBuilder rst=new StringBuilder();
        int len=s.length();
        int index=s.length()-1;
        while(index>=0){
            int curNum=Integer.valueOf(s.charAt(index)+"");
            if(curNum!=0){
                rst.insert(0, unitStrings[len-index-1]);
                rst.insert(0, num[curNum]);                 
            }else {
                if(rst.length()!=0&&rst.charAt(0)!='零'&&rst.charAt(0)!='万'&&rst.charAt(0)!='亿'){
                    rst.insert(0, num[curNum]);
                    }
                if(unitStrings[len-index-1].equals("万")||unitStrings[len-index-1].equals("亿")){
                    rst.insert(0, unitStrings[len-index-1]);
                }
            }
            index--;
        }
        int blank=0;
        for(int i=rst.length()-1;i>0;i--){
            blank++;
            if(blank==7){
                rst.insert(i, ',');
                blank=0;
            }
        }
        return rst.toString();
    }

#内推#
全部评论
我也是这道题,没做出来,算法太烂了😂
点赞 回复
分享
发布于 2018-04-14 00:09

相关推荐

投递美团等公司10个岗位
点赞 评论 收藏
转发
点赞 5 评论
分享
牛客网
牛客企业服务