题解 | #人民币转换#
人民币转换
https://www.nowcoder.com/practice/00ffd656b9604d1998e966d555005a4b
import java.util.HashMap; import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); StringBuilder RMB_ZH = new StringBuilder(); RMB_ZH.append("人民币"); String[] groupUnit = {"亿万亿", "万万亿", "万亿", "亿", "万", "元"}; String[] groupInnerUnit = {"仟", "佰", "拾", ""}; String[] numZh = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}; String[] decimalUnit = {"角", "分", "厘", "毫"}; // 待处理字符 String num = scanner.nextLine(); // 按 . 拆分成两部分 // 处理小数部分的标识 boolean decimalHandleFlag = num.contains("."); String[] parts = num.split("\\."); StringBuilder intPart = new StringBuilder(parts[0]); String decimalPart = decimalHandleFlag ? parts[1] : null; //获取总组数 int totalGroup = (intPart.length() + 3) / 4; // 字符填充,将整个串设置为4的整倍数 int remain = intPart.length() % 4; int paddingNum = remain == 0 ? 0 : 4 - remain; for (int i = 0; i < paddingNum; i++) { intPart.insert(0, "*"); } // ------------------------ 处理整数部分 ---------------------------------------- // 分组切分序号 int partIdx = 0; // 按组处理整数部分 for (int i = groupUnit.length - totalGroup; i < groupUnit.length; i++) { String group = intPart.substring(partIdx * 4, (partIdx + 1) * 4); String partBuffer = ""; for (int idx = 0; idx < group.length(); idx++) { char c = group.charAt(idx); if (c == '*') { continue; } // 保证在千 百 拾之前不会出现“零” String unit = idx < 3 && c == '0' ? "" : groupInnerUnit[idx]; String numStr = c == '1' && unit.equals(groupInnerUnit[2]) ? "" : numZh[c - '0']; partBuffer = partBuffer + numStr + unit; } // 处理以”零”开头 if (partBuffer.startsWith("零零零零")) { partBuffer = partBuffer.replaceFirst("零零零零", ""); } else if (partBuffer.startsWith("零零零")) { partBuffer = partBuffer.replaceFirst("零零零", "零"); } else if (partBuffer.startsWith("零零")) { partBuffer = partBuffer.replaceFirst("零零", "零"); } // // 处理已”零“结尾的字符 while (true) { if (partBuffer.endsWith(numZh[0])) { partBuffer = partBuffer.substring(0, partBuffer.length() - 1); } else { break; } } // 如果该组没有字符串则不进行拼接 if (partBuffer.length() > 0) { RMB_ZH.append(partBuffer); RMB_ZH.append(groupUnit[i]); } // 处理下一组 partIdx++; } // -----------------------------处理小数部分------------------------------------ if (decimalHandleFlag) { for (int i = 0; i < decimalPart.length(); i++) { char c = decimalPart.charAt(i); if (!(c == '0')) { RMB_ZH.append(numZh[c - '0']).append(decimalUnit[i]); } } } else { RMB_ZH.append("整"); } System.out.println(RMB_ZH); } }