人民币大小写转换-202010微盟笔试题目
解题思路:
主要是分析读法特点:
本题限制了人民币的金额大小,即小于1亿,我们可以根据人民币的读法将每个位置上的读法与每个位置上的数字分别用枚举法表示出来,然后根据读法(从高位到低位)一一映射;
需要注意的问题主要有以下方面:
1.高位为0,此时不读,需要从高位依次遍历,直到第一个不为0的最高位出现,记录其所在的位置的读法即units数组以及数字的大小写转换;
2.低位为0:
如果低位为0,且不为零的最低位置为万或者万以上(万+),则直接以万元结尾;
如果如果低位为0,且不为零的最低位置为万以下(万-),则直接以元结尾;
class Solution {
public String number2CNMoney (double money) {
// write code here
//忽略小数部分
money = (int)money;
StringBuffer sbf = new StringBuffer();
char[] data = new char[]{'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
char[] units = new char[]{'元','拾','佰','仟','万','拾','佰','仟','亿'};
int[] val = new int[9];
int index = 0;
while (index < 9 && money != 0){
val[index++] = (int) (money % 10);
money = money / 10;
}
int l = 0;
while (l < 9 && val[l] == 0){
l++;
}
if (l == 9){
return "零元";
}
int r = 8;
while (r >= l && val[r] == 0){
r--;
}
for (int i = r; r >= l; r--){
int da = val[i];
sbf.append(data[da]);
sbf.append(units[i]);
}
if (l >= 4)
sbf.append("万元");
else
sbf.append("元");
return sbf.toString();
}
}