Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit b533c62

Browse files
add etc
1 parent a0acb0b commit b533c62

File tree

1 file changed

+61
-0
lines changed
  • src/其他/阿拉伯数字转中文

1 file changed

+61
-0
lines changed
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package 其他.阿拉伯数字转中文;
2+
3+
/**
4+
* @author yuanguangxin
5+
*/
6+
public class Main {
7+
private static final char[] numArrays = {'零', '一', '二', '三', '四', '五', '六', '七', '八', '九'};
8+
private static final char[] units = {'十', '百', '千', '万', '亿'};
9+
private static final StringBuilder ans = new StringBuilder();
10+
11+
/**
12+
* 采用递归的方法将转换的结果存储到 ans 变量中, 注意 `万` 和 `亿` 在 units 数组中不是连续的, 所以
13+
* 当数字达到5位数或9位数时, 我们分开讨论。
14+
*
15+
* @param num
16+
*/
17+
private static void intToChineseNum(int num) {
18+
String s = String.valueOf(num);
19+
char[] chars = s.toCharArray();
20+
int n = chars.length;
21+
22+
// 只剩下一位时, 直接返回 numArrays 数组中对应的数字
23+
if (n == 1) {
24+
ans.append(numArrays[chars[0] - '0']);
25+
// 如果 num 超过 5 位, 则先判断是否上亿, 然后将 num 拆分
26+
} else if (n >= 5) {
27+
n = n >= 9 ? 9 : 5;
28+
int multi = (int) Math.pow(10, n - 1);
29+
// div 表示 num 中上亿或上万的部分数值
30+
int div = num / multi;
31+
// mod 表示剩余的部分数值
32+
int mod = num % multi;
33+
// 对前一部分数值进行转换, 然后添加单位万/亿
34+
intToChineseNum(div);
35+
ans.append(n == 5 ? units[3] : units[4]);
36+
String s1 = String.valueOf(div);
37+
String s2 = String.valueOf(mod);
38+
// 判断中间是否有 0
39+
if (s.charAt(s1.length() - 1) == '0' || s2.length() < n - 1) ans.append("零");
40+
// 转换剩余部分
41+
intToChineseNum(mod);
42+
// 如果 num 不超过 5 位, 处理过程与上面相似
43+
} else {
44+
int multi = (int) Math.pow(10, n - 1);
45+
int div = num / multi;
46+
int mod = num % multi;
47+
ans.append(numArrays[div]).append(units[n - 2]);
48+
if (mod != 0) {
49+
if (String.valueOf(mod).length() < n - 1) {
50+
ans.append("零");
51+
}
52+
intToChineseNum(mod);
53+
}
54+
}
55+
}
56+
57+
public static void main(String[] args) {
58+
Main.intToChineseNum(121399013);
59+
System.out.println(ans.toString());
60+
}
61+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /