在与财务相关的应用中,经常会用到人民币金额的大写,比如发票的打印程序。
本题的任务是:从键盘输入一个十亿以内的正整数(int类型),把它转换为人民币金额大写(不考虑用户输入错误的情况)。
比如,用户输入:35201,程序输出:叁万伍仟贰佰零壹
用户输入:30201,程序输出:叁万零贰佰零壹
用户输入:30001,程序输出:叁万零壹
用户输入:31000,程序输出:叁万壹仟
用户输入:120023201,程序输出:壹亿贰仟零贰万叁仟贰佰零壹
用户输入:120020001,程序输出:壹亿贰仟零贰万零壹
用户输入:100000001,程序输出:壹亿零壹
可以看到,在万后满千位,则不加零,否则要补零,但不要出现类似“零零”的情况。
在亿后满千万位,则不加零,否则要补零,但整个“万档”没有数字时,“万”字省去。
运行结果:
输入一个十亿以内的正整数(int类型)
120023201
壹亿贰仟零贰万叁仟贰佰零壹
package mec.lanqiao;
import java.util.*;
public class Main {
static char[] upper = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' }; // 大写数字
// 获取一个四位数的大写字符串,零的数目可以为多个
static String addZero(String t) {
StringBuilder sb = new StringBuilder();
int n1 = Integer.parseInt("" + t.charAt(0));
int n2 = Integer.parseInt("" + t.charAt(1));
int n3 = Integer.parseInt("" + t.charAt(2));
int n4 = Integer.parseInt("" + t.charAt(3));
if (n1 == 0) {
sb.append("零");
} else {
sb.append(upper[n1] + "仟");
}
if (n2 == 0) {
sb.append("零");
} else {
sb.append(upper[n2] + "佰");
}
if (n3 == 0) {
sb.append("零");
} else {
sb.append(upper[n3] + "拾");
}
if (n4 != 0) {
sb.append(upper[n4]);
}
return sb.toString();
}
static void f(String num) {
int len = num.length();
if (len < 5) {
for (int i = 0; i < 4 - len; i++) {
num = "0" + num;
}
String s = addZero(num);
// 去尾部的零
while (s.endsWith("零")) {
s = s.substring(0, s.length() - 1);
}
// 去首部的零
while (s.startsWith("零")) {
s = s.substring(1);
}
// 消除重复的零
s = s.replaceAll("零零零", "零");
s = s.replaceAll("零零", "零");
System.out.println(s);
} else if (len < 9) {
String s, s1, s2;
s1 = num.substring(0, num.length() - 4);
int i = 4 - s1.length();
while (i-- > 0) {
s1 = "0" + s1;
}
s1 = addZero(s1) + "万";
s2 = num.substring(num.length() - 4);
s2 = addZero(s2);
s = s1 + s2;
while (s.endsWith("零")) {
s = s.substring(0, s.length() - 1);
}
while (s.startsWith("零")) {
s = s.substring(1);
}
s = s.replaceAll("零零零", "零");
s = s.replaceAll("零零", "零");
System.out.println(s);
} else {
String s, s1, s2, s3;
s1 = num.substring(0, num.length() - 8);
int i = 4 - s1.length();
while (i-- > 0) {
s1 = "0" + s1;
}
s2 = num.substring(num.length() - 8, num.length() - 4);
s3 = num.substring(num.length() - 4);
s1 = addZero(s1) + "亿";
s2 = addZero(s2) + "万";
s3 = addZero(s3);
s = s1 + s2 + s3;
while (s.endsWith("零")) {
s = s.substring(0, s.length() - 1);
}
while (s.startsWith("零")) {
s = s.substring(1);
}
s = s.replaceAll("零零零", "零");
s = s.replaceAll("零零", "零");
System.out.println(s);
}
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String num = scan.next();
scan.close();
f(num);
}
}