BiliBili服务端笔试0322编程题

发布于 16 天前  28 次阅读


给定一个整数 请你输出这个整数的中文读法

数据范围 |val| ≤10^9

  • 输入: 114514
  • 输出: "十一万四千五百一十四"
  • 输入:1000
  • 输出:“一千”
  • 输入:-1035
  • 输出: "负一千零三十五"
private static final String[] digits = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
public String num2cn(int n) {
if (n == 0) return digits[0];
String sign = "";
long num = n;
if (num < 0) {
sign = "负";
num = -num;
}
return sign + convert(num, true);
}
private String convert(long num, boolean isHighest) {
if (num < 10000) {
return convertBelow10000((int)num, isHighest);
}
if (num < 100000000) {
long wan = num / 10000;
long rest = num % 10000;
String result = convert(wan, true) + "万";
if (rest != 0) {
if (rest < 1000) {
result += "零" + convert(rest, false);
} else {
result += convert(rest, false);
}
}
return result;
} else {
long yi = num / 100000000;
long rest = num % 100000000;
String result = convert(yi, true) + "亿";
if (rest != 0) {
if (rest < 10000000) {
result += "零" + convert(rest, false);
} else {
result += convert(rest, false);
}
}
return result;
}
}
private String convertBelow10000(int num, boolean isHighest) {
if (num < 10) {
return digits[num];
}
if (num < 100) {
int ten = num / 10;
int unit = num % 10;
if (isHighest && ten == 1) {
return "十" + (unit == 0 ? "" : digits[unit]);
} else {
return digits[ten] + "十" + (unit == 0 ? "" : digits[unit]);
}
}
if (num < 1000) {
int hundred = num / 100;
int rem = num % 100;
String result = digits[hundred] + "百";
if (rem != 0) {
if (rem < 10) {
result += "零" + convertBelow10000(rem, false);
} else {
if (rem < 10) {
result += "零" + convertBelow10000(rem, false);
} else {
result += convertBelow10000(rem, false);
}
}
}
return result;
}
int thousand = num / 1000;
int rem = num % 1000;
String result = digits[thousand] + "千";
if (rem != 0) {
if (rem < 100) {
result += "零" + convertBelow10000(rem, false);
} else {
result += convertBelow10000(rem, false);
}
}
return result;
}
人生の意味は平凡ですか、それとも素晴らしいですか?
最后更新于 2025-03-22