Java 版本

import java.util.*;

public class Solution {
    public String num2cn(int n) {
        if (n == 0)
            return "零";
        char[] words = String.valueOf(Math.abs(n)).toCharArray();
        String[] unitsMap = new String[]{"", "十", "百", "千", "", "万", "亿"};
        String[] digitsMap = new String[]{"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
        StringBuilder builder = new StringBuilder();
        for (int cnt = 0, len = Math.min(words.length, 4); len > 0; len = Math.min(words.length - cnt * 4, 4)) {
            StringBuilder segBuilder = new StringBuilder();
            int pos = words.length - 1 - cnt * 4;
            boolean full0 = true;
            for (int i = len - 1; i >= 0; i--) {
                int val = words[pos - i] - '0';
                if (val != 0) {
                    full0 = false;
                    if (words[pos - i] == '0') {
                        segBuilder.append(digitsMap[0]);
                    }
                    segBuilder.append(digitsMap[val]).append(unitsMap[i]);
                }
            }
            if (!full0)
                segBuilder.append(unitsMap[cnt + 4]);
            builder.insert(0, segBuilder);
            cnt++;
        }
        String val = builder.toString().replaceAll("^一十","十");
        return n < 0 ? "负" + val : val;
    }
}