迅雷笔试题:
请实现一个方法将一亿以内的数字变成汉语数字
主要有两个要点:
1. 以“万”为分割点,“万”以上的字符处理和“万”以下的字符处理逻辑一致
2. 如果有连续的“零”,那么要合并成一个“零”
public class MyTest {
public static void main(String[] args) {
Random random = new Random(System.currentTimeMillis());
int i = 1500003;//random.nextInt(100000000);
System.out.println("Befor convert is i = " + i);
System.out.println(convertInt2Chinese(i));
}
private static String convertInt2Chinese(int num) {
StringBuffer stringBuffer = new StringBuffer();
if (num / 10000 != 0) {
convertIntBelowWan2Chinese(num / 10000, stringBuffer);
if (stringBuffer.length() != 0) {
stringBuffer.append("万");
}
convertIntBelowWan2Chinese(num % 10000, stringBuffer);
} else {
convertIntBelowWan2Chinese(num, stringBuffer);
}
return stringBuffer.toString();
}
private static String convertIntBelowWan2Chinese(int num, StringBuffer stringBuffer) {
int[] unitArray = {1000, 100, 10, 1};
String chineseDigitArray = "零壹贰叁肆伍陆柒捌玖";
String chineseUnitArray = "仟佰拾";
for (int i = 0; i < unitArray.length && num != 0; i++) {
int quotient = num / unitArray[i];
if (quotient == 0) {
if (stringBuffer.length() != 0) {
if (stringBuffer.charAt(stringBuffer.length() - 1) != '零') {
stringBuffer.append(chineseDigitArray.charAt(quotient));
}
}
} else {
stringBuffer.append(chineseDigitArray.charAt(quotient));
if (i < chineseUnitArray.length()) {
stringBuffer.append(chineseUnitArray.charAt(i));
}
}
num = num % unitArray[i];
}
return stringBuffer.toString();
}
}