阿拉伯数字转汉字

阿拉伯数字转汉字


最近面试字节的时候,遇到了这道题目,当时没做出来,面试完找了好多博客,感觉都不太正确。

于是我自己动手实现了一个


import java.util.Scanner;

public class AlaboToChina {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入数字:");
        while (scanner.hasNext()) {
            String str = scanner.next();
            //定义转换后的汉语数字
            String[] nums = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
            //定义单位
            String[] units = {"十", "百", "千", "万", "十", "百", "千", "亿", "十", "百", "千"};
            String res = "";

            int len = str.length();
            int pre = -1;

            for (int i = 0; i < len; i++) {
                int num = str.charAt(i) - '0';
                if (num != 0) { // 若当前num不是0,即记录到res中
                    if (pre == 0) res += nums[0]; // 如果该字符之前的字符是0,那么先拼接前面的零
                    res += nums[num]; // 若当前num不是0,即记录到res中
                }
                // 拼完数字后,拼接单位
                // 1.首先i是最后一个元素,即个位的时候不用拼符号,所以i!=len-1
                // 2.1 其次num不为0不用说肯定拼接
                // 2.2 当前i在万的前面或者亿的前面一位即(len-i)%4==1的时候也得拼接,举例101234,i=1时候的时候尽管num=0,但是这个万还是得要
                if (i != len - 1 && ((len - i) % 4 == 1 || num != 0)) {
                    res += units[len - 2 - i]; // 拼接的话直接用len-2-i就能获得对应的单位位置
                }
                pre = num;
            }
            // 最后处理下,如果是10000这种结果会是一十万,这种可以省略前的一,截成十万
            if (res.length() > 1 && res.charAt(0) == '一' && res.charAt(1) == '十') {
                res = res.substring(1);
            }
            System.out.println("转换结果为:" + res);
        }
    }
}

我自己尝试了一些测试用例,好像没啥问题。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值