描述 | |
---|---|
知识点 | 字符串 |
运行时间限制 | 10M |
内存限制 | 128 |
输入 |
输入一个doulbe数 |
输出 |
输出人民币格式 注: 下面乱码为:
人民币拾伍万壹仟壹佰贰拾壹元壹角伍分 人民币拾伍万壹仟壹佰贰拾壹元壹角伍分
|
样例输入 | 151121.15 |
样例输出 | 人民币拾伍万壹仟壹佰贰拾壹元壹角伍分 |
import java.util.Arrays;
import java.util.Scanner;
public class Main{
public static final char[] chNumSet = "零壹贰叁肆伍陆柒捌玖".toCharArray();
public static final char[] chPowSet = "分角元拾佰仟万拾佰仟亿拾佰仟万".toCharArray();
public static void main(String[] args) {
new Main().go();
}
private void go() {
// 读入一个数值
Scanner console = new Scanner(System.in);
while (console.hasNext()) {
double d = console.nextDouble();
// 解析该数值为汉字形式
long l = (long) (d * 100);
String strRes = parse(l);
System.out.println("人民币" + strRes);
}
}
private String parse(long n) {
if (n == 0) {
return "零元整";
}
StringBuilder sb = new StringBuilder();
// 将数值解析为单个数值的数组
int[] nums = toNum(n);
for (int i = nums.length - 1; i >= 0; i--) {
sb.append(chNumSet[nums[i]]);
sb.append(chPowSet[i]);
}
String res = sb.toString().replaceAll("零[分角拾佰仟]", "零")
.replaceAll("零+", "零").replaceAll("零+元", "元")
.replaceAll("零+万", "万").replaceAll("零+亿", "亿")
.replaceAll("亿万", "亿");
if (res.startsWith("壹拾")) {
res = res.substring(1);
}
if (res.endsWith("零")) {
res = res.substring(0, res.length() - 1);
}
if (res.endsWith("元")) {
res = res + "整";
}
return res;
}
private int[] toNum(long n) {
int[] res = new int[0];
while (n != 0) {
int end = (int) (n % 10L);
// 扩展数组的长度
res = Arrays.copyOf(res, res.length + 1);
res[res.length - 1] = end;
n /= 10L;
}
return res;
}
}
之前看的别人的解法,我觉得挺巧妙的,找不到原文出处了