題目
- 實現一個 numberTranToCN 函數
- 好比 numberTranToCN(12345),輸出 一萬兩千三百四十五;
- 好比 numberTranToCN(1000003),輸出 一百萬零三;
/*
解題思路:將數字每四個拆分一次,每次後面加萬,億,萬億,億億做爲節權位
而後單獨將每四個數按狀況轉化爲漢字,其餘狀況按下標便可轉化,主要考慮爲0的狀況,
當零爲後面出現時,直接去除,當在兩個大於零的數字中間出現時,將多個零合併爲一個零
*/
let numChar=['零','一','二','三','四','五','六','七','八','九']
let numUnit=['','十','百','千'] //權位
let numSection=['','萬','億','萬億','億億'] //節權位
formatSection=(num)=>{
let arr=(num+'').split('').reverse();
let str=''
for(let i=0;i<arr.length;i++){ //將0-9轉化爲零到九
let char=arr[i]==0?numChar[0]:numChar[arr[i]]+numUnit[i] //當數字爲0時不加權位,非零加權位
str=char+str;
}
let s=str.replace(/零+/g,'零').replace(/零+$/,'') //將多個零合併爲一個零,並剔除尾端的零
return s;
}
formatNum=(num,str)=>{ //將字符串按個數拆分
let len=Math.ceil(str.length/num);
let arr=[]
for(let i=0;i<len;i++){
let reverseStr=str.split('').reverse().join('')
let s=reverseStr.slice(i*num,i*num+num).split('').reverse().join('')
arr.unshift(s)
}
return arr
}
numberTranToCN=(num)=>{
let arr=formatNum(4,num+'') //將數字每四個拆分一次
let list=[]
for(let i=0;i<arr.length;i++){
let str=formatSection(arr[i])
list.push(str)
}
let reverseList=list.reverse();
for(let j=0;j<reverseList.length;j++){
reverseList[j]+=numSection[j]
}
return reverseList.reverse().join('')
}
let str=numberTranToCN(12004004002)
console.log(str)
複製代碼