阿拉伯数字转化大写中文汉字问题

题目

输入一串阿拉伯数字整数,输出对应的中文大写数字

样例

123456789
壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖

1000001234
壹拾亿零壹仟贰佰叁拾肆

10000
壹万

10010
壹万零壹拾

思路

记得小学学读数的时候,从最小位从右到左,每4个数一组,如123456789,则分组为1|2345|6789,这实际上是以亿和万为分界线。
有个比较棘手的问题是0的读法,因为如果有连续0,不能输出“零零零…”,要输出一个零或不输出,因为如1|0000|1234,不能输出“壹亿零万壹仟贰佰叁拾肆”。
末尾有0,如1110,则最后一个零不能输出。
末尾全是0,则一个零都不能输出。
因此我的解法也从该分界方法处入手。

代码

Java:

public class Test9 {
    public static void main(String[] args) {
        // 对应大写中文数字
        String[] arr1 = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
        // 逆序对应每一位的单位,如12345,2对应拾,3对应佰。
        String[] arr2 = {"", "", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟"};
        String num = null;
        int count = 0;
        Scanner sc = new Scanner(System.in);
        num = sc.nextLine();
        int k = num.length();
        for (int i = 0; i < num.length(); i++) {
            // index是当前位的实际数字
            int index = num.charAt(i) - 48;
            if (index == 0) {
                // count作用是计算连续0的个数,以亿位和万位分界,每到一个分界点就清零
                count++;
            } else {
                count = 0;
            }
            // 如果没有连续的0,直接输出大写数字和单位
            // 如果有,则先判断:&&左边判断当前位是否为亿位或万位,
            // 右边判断该段是否全为0(如1|0000|1234,如果不加这个条件,会输出壹亿零万壹仟贰佰叁拾肆)
            // 符合条件则输出该位单位,且count置0
            // 每读一位k都要减一
            if (count == 0) {
                System.out.print(arr1[index] + arr2[k--]);
            } else {
                if ((arr2[k] == "亿" || arr2[k] == "万") && count != 4) {
                    System.out.print(arr2[k]);
                    count = 0;
                }
                // 如果当前只有一个连续0,那么需要判断后续是否全为0
                // 如果不进行判断,则对于10100,如果读到第四位0,此时count为1,那么会输出壹万零壹佰零元
                if (count == 1) {
                    boolean isSeqZero = true;
                    for (int j = i; j < num.length(); j++) {
                        if (num.charAt(j) - 48 != 0) {
                            isSeqZero = false;
                            break;
                        }
                    }
                    if (!isSeqZero) {
                        System.out.print("零");
                    }
                }
                k--;
            }

        }
    }
}
原文地址:https://www.cnblogs.com/zyoung/p/6678486.html