1. 程式人生 > >【演算法】數字讀法轉漢字

【演算法】數字讀法轉漢字

今天和同學聊天

me:你大爺
other:你二大爺
me:你三大爺
...

突然想到能否用程式實現數字轉化為漢字
例如:1040 -> 一千零四十

程式碼如下

<?php
$arr = [
    0 =>  '零',
    1 =>  '一',
    2 =>  '二',
    3 =>  '三',
    4 =>  '四',
    5 =>  '五',
    6 =>  '六',
    7 =>  '七',
    8 =>  '八',
    9 =>  '九',
    10 =>  '十'
, 100 => '百', 1000 => '千', 10000 => '萬', 100000000 => '億', ]; $i = 1021990041030; getName($i, $arr); function getName($i, $arr) { $strName = ''; $flag = 0; $billions = intval($i / 100000000); if ($billions) { $strName = wanName($billions, $arr, $strName, $flag); $strName
.= $arr[100000000]; } $i = $i % 100000000; echo $strName . PHP_EOL; if ($i) { $strName = wanName($i/10000, $arr, $strName, $flag); $strName .= $arr[10000]; } $strName = wanName($i%10000, $arr, $strName, $flag); echo $strName . PHP_EOL; return $strName; } // 遞迴,$i是要轉的數字,$arr定義對應的陣列,$strName輸出的名字,
// 因為1004 -> 一千零四,而不是一千零零四。$flag標記上一個是否為零,$divisor 是除數 function wanName($i, $arr, $strName, $flag = 1, $divisor = 10000) { $tmp = intval($i / $divisor); if ($tmp) { $flag = 1; $strName .= $arr[$tmp] . $arr[$divisor]; } else if($flag){ $flag = 0; $strName .= $arr[0]; } $i = $i % $divisor; if ($i == 0) { return $strName; } echo $strName . PHP_EOL; if ($divisor > 10) { $strName = wanName($i, $arr, $strName, $flag, $divisor/10); } else { $i = $i % 10; $strName .= $arr[$i]; } return $strName; }

執行結果

一萬
一萬零
一萬零二百
一萬零二百一十
一萬零二百一十九億
一萬零二百一十九億
一萬零二百一十九億九千
一萬零二百一十九億九千零
一萬零二百一十九億九千零
一萬零二百一十九億九千零四萬
一萬零二百一十九億九千零四萬一千
一萬零二百一十九億九千零四萬一千零
一萬零二百一十九億九千零四萬一千零三十