最近在找工作,一家公司的面试题是这样的:输入万以下的正整数,转换成相应的大写汉字(比如:2222,为贰仟贰佰贰拾贰,注意:2000–>贰仟);
当时拿到题目的时候,以为挺简单的,但是看到后面2000–>贰仟,觉得没有想的那么简单,加上面试又紧张,最终考虑到了2000,没有考虑到2010(贰仟零壹拾)或者2001(贰仟零壹)的这种情况,不过面试我的是公司技术负责人,他给我说明了,下面是思路:
1、0~9的int数组,零至玖的数组
2、取到相应下标,得到中文汉字
3、我只考虑到了2000,判断就是为零的不拼接,
所以重点来了面试负责人提示的思路(我写具体一下):在当前下如果为0的时候,判断当前下一个是不是0,是的话跳过,不是的话拼接。
以下是我回来后整理的代码,记录一下:
public void getChinese(int questNum) {
String questString = String.valueOf(2100);
int[] num = {0, 1, 2, 3, 4,5,6,7,8,9};
String chinese[] = {"零", "壹", "贰", "叁", "肆","伍","陆","柒","捌","玖"};
String dw[] = {"个", "拾", "百", "仟"};
/*****************************以上是一一映射*************************************/
int length = questString.length();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < length; i++) {
char c = questString.charAt(i);
//如果当前为0,判断下一个是否为0,是的话跳过
if (c == '0' && i + 1 < length && questString.charAt(i + 1) == '0') {
continue;
}
int index = Integer.parseInt(c + "");
int numIndex = num[index];
String indexChinese = chinese[numIndex];
if (i == length - 1) {
if (c != '0') {
sb.append(indexChinese);
}
} else {
sb.append(indexChinese);
if (c != '0') {
int dwIndex=length-1-i;
sb.append(dw[dwIndex]);
}
}
}
Log.i("MainActivity", "getChinese: "+sb);
System.out.print(sb);
}