题解 | #数组分组#
人民币转换
http://www.nowcoder.com/practice/00ffd656b9604d1998e966d555005a4b
将数字用.切割,整数部分 + 小数部分 整数部分 以4为单位切割,遍历得到中文。
举个例子: 1234 1后面 + '仟' 2后面 + '佰' 这个就是以‘1234’的长度决定的。
那什么时候加‘万’,’亿‘呢?
用整个数字的长度 / 4 向上取整, 遍历, 分为’亿‘,‘万’,‘个‘
let length = Math.ceil(num.length / 4);
(length - i )% 3 == 0 即为 ’亿‘,2 即为 ’万‘,1 为 ‘个‘ 省略不写
当中文没有出现'零' 则遇到‘0‘添加'零',
当出现 '零万' 则 替换为 ‘万零’
比如10001000 中文为'壹仟零万壹仟‘ 应该是’壹仟万零壹仟‘
let line;
function getFirst(num){
let length = Math.ceil(num.length / 4);
let first = num.length % 4 == 0 ? 4 : num.length % 4
let explain = '';
let hasAdd = false
let canAdd = hasZero(num)
for(let i = 0;i< length;i++){
hasAdd = explain.indexOf('零') > -1
let cur = num.substring(first+(i-1)*4,first + (i)*4);
let str = getChina(cur,length - i,canAdd,hasAdd);
explain+= str
}
return explain
}
function getNext(num){
let explain = '';
let chinaArr = '壹,贰,叁,肆,伍,陆,柒,捌,玖'.split(',');
if(Number(num) == 0){
explain+='整'
}else{
let arr = num.split('');
let index = 0
for(let i of arr){
if(i != '0' && index == 0){
explain+=chinaArr[(Number(i) - 1)] + '角'
}else if(i != '0' && index == 1){
explain+=chinaArr[(Number(i) - 1)] + '分'
}
index++
}
}
return explain
}
function hasZero(num){
let flag = false
if(num.length == 1){
flag = false
}else{
flag = num.includes('0')
}
return flag
}
function getChina(num,stage,canAdd,hasAdd){
let chinaArr = '壹,贰,叁,肆,伍,陆,柒,捌,玖'.split(',');
let arr = num.split('');
let str = ''
let step = arr.length
for(let i of arr){
if(i != '0'){
if(step == 4){
str+=chinaArr[(Number(i) - 1)] + '仟'
}else if(step == 3){
str+=chinaArr[(Number(i) - 1)] + '佰'
}else if(step == 2){
if((Number(i) - 1)!=0){
str+=chinaArr[(Number(i) - 1)] + '拾'
}else{
str+= '拾'
}
}else if(step == 1){
str+=chinaArr[(Number(i) - 1)]
}
}else{
if(canAdd && !hasAdd ){
str+= '零'
hasAdd = true
}
}
step--
}
if(stage % 3 == 0){
str+='亿'
}else if(stage % 3 == 2 ){
str+='万'
}
// console.log(str)
str = str.replace('零万','万零')
return str
}
while(line = readline()){
let numArr = line.split('.');
// 两位但是后面的不是零
let fisrt = getFirst(numArr[0]);
let next = getNext(numArr[1]);
let hasYuan = numArr[0].length > 1 || numArr[0].length == 1 && Number(numArr[0]) !=0
console.log(`人民币${fisrt}${hasYuan ?'元':''}${next}`)
}