面试题:阿拉伯数字转换中文大写

最近在找工作,一家公司的面试题是这样的:输入万以下的正整数,转换成相应的大写汉字(比如:2222,为贰仟贰佰贰拾贰,注意:2000–>贰仟);
当时拿到题目的时候,以为挺简单的,但是看到后面2000–>贰仟,觉得没有想的那么简单,加上面试又紧张,最终考虑到了2000,没有考虑到2010(贰仟零壹拾)或者2001(贰仟零壹)的这种情况,不过面试我的是公司技术负责人,他给我说明了,下面是思路:
1、0~9的int数组,零至玖的数组
2、取到相应下标,得到中文汉字
3、我只考虑到了2000,判断就是为零的不拼接,
所以重点来了面试负责人提示的思路(我写具体一下):在当前下如果为0的时候,判断当前下一个是不是0,是的话跳过,不是的话拼接。
以下是我回来后整理的代码,记录一下:

 public void getChinese(int questNum) {
        String questString = String.valueOf(2100);
        
        int[] num = {0, 1, 2, 3, 4,5,6,7,8,9};
        String chinese[] = {"零", "壹", "贰", "叁", "肆","伍","陆","柒","捌","玖"};
        String dw[] = {"个", "拾", "百", "仟"};
/*****************************以上是一一映射*************************************/

        int length = questString.length();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < length; i++) {
            char c = questString.charAt(i);
            //如果当前为0,判断下一个是否为0,是的话跳过
            if (c == '0' && i + 1 < length && questString.charAt(i + 1) == '0') {
                continue;
            }
            int index = Integer.parseInt(c + "");
            int numIndex = num[index];
            String indexChinese = chinese[numIndex];
            if (i == length - 1) {
                if (c != '0') {
                    sb.append(indexChinese);
                }
            } else {
                sb.append(indexChinese);
                if (c != '0') {
                    int dwIndex=length-1-i;
                    sb.append(dw[dwIndex]);
                }
            }
        }
        Log.i("MainActivity", "getChinese: "+sb);
        System.out.print(sb);
    }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值