java每日一题-将阿拉伯数字转为为汉语

输入:1000

          20222

          330101110

输出 :一千

          二万零二百二十二

           三亿三千零一十万一千一百一十


难点:1. 中间如果出现了多个0 怎么处理

          2.如何实现数字和单位的组合

          3.因为数是一个个拼出来的,如何不使用低效的拼接字符串


第三点问题可以用StringBuilder类解决,这个可以用append方法来一个个加字符串或者字符,直接toString

的方法就可以输出String字符串

       

第二点问题可以通过数组,将一到九的数字放入数组,十到万亿放入数组从而来组合如下

         String[] units = { "", "十", "百", "千", "万", "十万", "百万", "千万", "亿",
                 "十亿", "百亿", "千亿", "万亿" };

         char[] numArray = { '零', '一', '二', '三', '四', '五', '六', '七', '八', '九' };



第一点问题可以这样考虑无论是1001还是10000001,只要出现中间了0那么就会有中文数字‘零’,但是如果

出现了多个0,那么只能读一次‘零’,所以在每一个位判断的时候,只要出现是零,就加上一个‘零’,如果后面一位比较是0且前一位也是0,那么这一位因为前面是0的时候已经加上了‘零’,那么就不需再加了,直接比较下一位如下为代码截取一段

if (isZero) {  
                    if ('0' == val[i - 1]) {  
                        continue;  
                    } else {  
                        sb.append(numArray[n]);  
                    }  
       }


以下为代码:


import java.util.Scanner;

public class Read {
    

     static String tansform(long number) {
        
         String[] units = { "", "十", "百", "千", "万", "十万", "百万", "千万", "亿",
                 "十亿", "百亿", "千亿", "万亿" };
         char[] numArray = { '零', '一', '二', '三', '四', '五', '六', '七', '八', '九' };
         char[] val = Long.toString(number).toCharArray();  
            int len = val.length;
            int divnum = 0;
            StringBuilder sb = new StringBuilder();  
            for (int i = 0; i < len; i++) {  
                String m = val[i] + "";  
                int n = Integer.valueOf(m);  
                boolean isZero = n == 0;  
                String unit = units[(len - 1) - i];
                if (isZero) {  
                    if ('0' == val[i - 1]) {  
                        continue;  
                    } else {  
                        sb.append(numArray[n]);  
                    }  
                } else {  
                    sb.append(numArray[n]);  
                    sb.append(unit);  
                }
            }
            return sb.toString();  
        }  
        


        public static void main(String[] args){
            Scanner in = new Scanner(System.in);
            String res;
                
            long _number;
            _number = Long.parseLong(in.nextLine().trim());
      
            res = tansform(_number);
            System.out.println(res);
        }

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值