题解 | #人民币转换#
人民币转换
https://www.nowcoder.com/practice/00ffd656b9604d1998e966d555005a4b
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String[] val = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };// 0~9
String[] k1 = { "元", "万", "亿" };// k=1时的单位
String[] k032 = { "仟", "", "拾", "佰" };// k=0 2 3时的单位
String[] decimal = { "整", "角", "分" };
StringBuffer bu = new StringBuffer();
String prex = "人民币";
bu.append(prex);
String a = null;
try {
a = in.readLine();
in.close();
} catch (IOException e) {
e.printStackTrace();
}
int l = a.length(), i = 0, j, k, num = 0, zeroNum = 0;
boolean f1 = true;
char[] chrInteger = new char[l - 3];
char[] chrDecimal = new char[3];
a.getChars(0, l - 3, chrInteger, 0);
a.getChars(l - 3, l, chrDecimal, 0);
l -= 3;// 循环遍历只考虑整数位
while (i < l) {
num = chrInteger[i] - '0';
if (num == 0) {
zeroNum++;
i++;
continue;
}
if (zeroNum > 0) {// 该位前面有0
if (l - i != 4)// 该位不是千位,就加0;千前面是0,就不加0
bu.append(val[0]);
zeroNum = 0;// 0的个数重置为0,
}
j = (l - i) /
4;// 该位是4的几倍,0倍就是个位到千位,1倍就是万位到千万位
k = (l - i) %
4;// 该位是1~4位的第几位,以4作为循环依据,个,十,百,千
if (k == 2 &&
chrInteger[i] == '1') {// k=2,是十位,且是1,就不用加1,只加十
bu.append(k032[2]);
} else if (k ==
1) {// k=2,是个位,看是j的值,如j=0对应元,j=1对应万,j=2对应亿
bu.append(val[num]).append(k1[j]);
} else {// 其他位,k=2,k=3,k=0,对应十,百,千
bu.append(val[num]).append(k032[k]);
}
i++;
}
getDecimal(bu, decimal, val, chrDecimal);// 获得小数位
System.out.print(bu);
}
public static void getDecimal(StringBuffer bu, String[] decimal,
String[] val, char[] chrDecimal) {
int i1 = chrDecimal[1] - '0', i2 = chrDecimal[2] - '0';
if (i1 == 0 && i2 == 0) {
bu.append(decimal[0]);
} else if (i2 == 0) {
bu.append(val[i1]).append(decimal[1]);
} else if (i1 == 0) {
bu.append(val[i2]).append(decimal[2]);
} else {
bu.append(val[i1]).append(decimal[1]).append(val[i2]).append(
decimal[2]);
}
}
}
查看11道真题和解析