|
题目:输入一个整数数字,输出该数字的中文拼音
比如:54 wushisi
100 yibai
6006 liuqianlingliu
60006 liuwanlingliu
解题思路:
首先要把数字的读音和数字对应起来,十位、百位、千位。。。等等的读音对应起来
接下来要考虑到几种情况:
1、各位为零
2、中间有连续几个零
3、当整数大于万以后怎么读
参考代码:
import java.util.HashMap;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
String line = in.nextLine();
HashMap<Integer, String> frist = new HashMap<Integer, String>();
frist.put(1, "shi");
frist.put(2, "bai");
frist.put(3, "qian");
frist.put(4, "wan");
frist.put(8, "yi");
HashMap<Integer, String> read = new HashMap<Integer, String>();
read.put(1, "yi");
read.put(2, "er");
read.put(3, "san");
read.put(4, "si");
read.put(5, "wu");
read.put(6, "liu");
read.put(7, "qi");
read.put(8, "ba");
read.put(9, "jiu");
read.put(0, "ling");
int num = Integer.parseInt(line);
StringBuilder sb = new StringBuilder();
int i = 0;
int j = 0;
while (num != 0) {
j = num % 10;
if (i != 0 && j != 0) {
sb.insert(0, frist.get(i));
sb.insert(0, read.get(j));
} else if (i != 0 && j == 0) {
if (sb.toString().length() != 0 && sb.indexOf("ling")!=0){//中间连续几个零
sb.insert(0, read.get(0));
}
} else if (i == 0 && j != 0) {
sb.insert(0, read.get(j));
}
i++;
if (i > 4) {
i = i % 4;//当位数大于万
}
num = num / 10;
}
String str = sb.toString();
str = str.replaceAll("null", "");
System.out.println(str);
}
}
} |
|
|