输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。
输入格式:
输入在一行中给出一个不超过9位的非负整数。
输出格式:
在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。
输入样例1:
813227345
输出样例1:
iYbQdBcScWhQdBeSf
输入样例2:
6900
输出样例2:
gQjB
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
中国人阅读数字的习惯是以四位为一个单位阅读,因此可以以四位为段进行划分
共性是每四位中都有“十,百,千”三个单位
0的阅读限制较多,因此在许多地方都做了限制。
代码也因此非常冗长。
望各位大佬们批评指正
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sca = new Scanner(System.in);
String mon = sca.next();
int[] num = new int[mon.length() + 1];
String[] uni = {"","S", "B", "Q"};
char[] lit = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'};
// 统计一下字符长度,后面会重复使用
int length = mon.length();
int count = 0;
// 将每一位的数字放入数组中,num[i]放的是第i位
int count0 = 0;
String ans ="";
for (int i = 0; i < length; i++) {
num[length - i] = mon.charAt(i) - 48;
}
// 下面代码对于只有一个0的情况无法处理,因此这样if
// 语句单独判断一下
if(mon.equals("0")){
System.out.print("a");
} else {
// 先输出出现亿位的情况
if(length == 9){
ans += lit[num[9]] + "Y";
length -= 1;
}
if (length > 4 && length < 9){
// for循环输出万位的情况
for (int i = length ; i > 4; i--) {
// 遇到数字为0的情况要不输出单位
// 如果全是0,那么不输出W
if(num[i] != 0){
ans += lit[num[i]] + uni[i-5];
// 如果这四位中后面全是0,则直接跳过输出W
for (int j = i; j > 5; j--) {
if (num[j-1] == 0){
count0 += 1;
}
}
if(count0 == i - 5){
break;
}
count0 = 0;
} else {
// 如果0前面还是0,那么这个0不输出
if(num[i + 1] != 0){
ans += lit[num[i]];
}
count += 1;
}
}
if (count != 4){
ans += "W";
}
// 用于传递到下一级单位
if (length == 8){
length -= 4;
} else {
length -= length % 4;
}
}
count0 = 0;
if (length > 0 && length < 5){
// for循环输出个位的情况
for (int i = length ; i > 0; i--) {
// 遇到数字为0的情况要不输出单位
if(num[i] != 0){
ans += lit[num[i]] + uni[i-1];
// 如果这四位中后面全是0,则直接跳过
for (int j = i; j > 1; j--) {
if (num[j-1] == 0){
count0 += 1;
}
}
if(count0 == i - 1){
break;
}
count0 = 0;
} else {
// 如果0前面还是0,那么这个0不输出
if(num[i + 1] != 0 || i == 4){
ans += lit[num[i]];
}
}
}
}
// 最后消灭掉尾巴上的0
char[] check = new char[ans.length()+1];
for (int i = 0; i < ans.length(); i++) {
check[i] = ans.charAt(i);
}
int newLength = ans.length();
for (int i = ans.length() - 1; i > 0; i--) {
if(check[i] == 'a'){
newLength -= 1;
} else {
break;
}
}
System.out.println(ans.substring(0,newLength));
}
}
}