這幾天,博主碰到了幾道關於數字轉漢字的javascript演算法題,在網上找了很多的答案,發現都有點複雜,於是我決定自己寫一篇關於這種演算法題的簡單解法,以下是博主自己的見解,有不足的地方請多指教。 接下來,我給大家講解一下幾道類似的例題 一、單個數字轉漢字的解決方法 1.利用數組存儲0-9的漢字,代碼 ...
這幾天,博主碰到了幾道關於數字轉漢字的javascript演算法題,在網上找了很多的答案,發現都有點複雜,於是我決定自己寫一篇關於這種演算法題的簡單解法,以下是博主自己的見解,有不足的地方請多指教。
接下來,我給大家講解一下幾道類似的例題
一、單個數字轉漢字的解決方法
1.利用數組存儲0-9的漢字,代碼如下:
<html>
<head>
<title>數字轉換為漢字</title>
</head>
<body>
<script type = "text/javascript">
var ary = ["零","壹","貳","叄","肆","伍","陸","柒","捌","玖"];
</script>
</body>
</html>
2.接著我們定義一個變數名為str的字元串,並賦值0,,代碼如下:
var str = "0";
3.那麼我們該怎麼把0轉換為零呢?使用“對號入座”演算法,代碼如下:
for(var i = 0;i < ary.length;i++) { for(var j = 0;j < str.length;j++) { if(str.charAt(j) == i) { str = ary[i]; } } }
(1) ary.length和str.length不用多說,這是指ary數組和str字元串的長度。這裡我們需要註意的是str.charAt(j)和ary[i],分別指在str這個字元串中索引為j的元素,在ary中索引為i的元素。
(2)在上面這段代碼的意思是,從漢字數組的第一個元素開始迴圈字元串的每一個元素,如果字元串里有對應的數字和i相等,就把此時ary數組中索引為i的元素賦給str(因為索引剛剛好從0開始,所以0代表零)。最後我們只要把str列印出來就可以了。
二、多個數字的轉換
從上面這段代碼中,我們知道瞭如何將單個數字轉換為漢字的方法,那麼我們接下來就講解多個數字轉換為漢字的方法
1.在原有的代碼上定義一個新的數組new_str來存儲字元串的每個元素,代碼如下:
var new_str = new Array(str.length);
2.將str = ary[i]改為new_str[j] = ary[i],代碼如下:
new_str[j] = ary[i];
3.最後,只需要把數組列印出來就行了。
document.write(new_str);
然後博主發現一個問題,以上將1221列印為壹,貳,貳,壹,那麼我們能不能把逗號去掉呢?可以的,只要寫一個迴圈把數組列印出來,代碼如下:
for(var i = 0;i < new_str.length;i++) { document.write(new_str[i]); }
最後列印出來的效果是壹貳貳壹。
三、上面的這些代碼只是原樣列印出來,能不能列印出“23 = 貳拾三”這種代碼呢?當然可以
1.能不能根據23後面的所剩下的幾位數,添加不同的漢字,例如23的2後面只剩下1位那麼我就在貳後面加上拾,23的3後面沒有數了,那就直接列印叄,那就試試看看,代碼如下:
for(var i = 0;i < new_str.length;i++) { switch(new_str.length - (i+1)) { case 1: { new_str[i] += "拾"; break; } case 2: { new_str[i] += "佰"; break; } case 3: { new_str[i] += "仟"; break; } case 4: { new_str[i] += "萬"; break; } } }
以上代碼我只寫到了萬。拾萬,仟萬,億這些需要自己添加下去,所以對可以轉換的數字只限制在10萬以內。
最後做一下總結,上面這段代碼可以把999列印為玖佰玖拾玖,但是會把800列印為捌佰零拾零,所以還是需要在switch()的case裡面寫一些判斷的,這些需要讀者們去自己加一些簡單的邏輯判斷。寫這篇隨筆的原因,是因為我TM也覺得有些人寫得太複雜了,在考慮到只使用數組,迴圈和條件的前提下我想了這段邏輯比較合乎新手的代碼來實現轉換。其實我本來是想寫一篇java的GC機制的隨筆,但是裡面涉及到的知識點有點多,只能慢慢寫,所以我決定先寫一篇關於為什麼要配置java環境,還有關於在命令行使用javac和java的一些知識點。 -方法雖然笨,但是實用 zemengcheng