- 論壇徽章:
- 0
|
本帖最后由 komicakomica 于 2015-10-11 10:50 編輯
說(shuō)明:
同時(shí)支持簡(jiǎn)繁體(羅馬數(shù)字、用圈框起來(lái)的數(shù)字也可以,但'兩'字不支持)
最多可以處理千萬(wàn)億級(jí)數(shù)字
不使用第三方庫(kù)
不支持小數(shù)部分
函數(shù)返回結(jié)果給調(diào)用者
函數(shù)體部分一共345個(gè)字符
下面上代碼- sub chnToNum($i) {my ($r,$t,$f,$l,$n)=<0 0 0 0 10000>;$i.subst(/零|\〇/,'',:g).split(/<?after 億|萬(wàn)|千|百|(zhì)十|億|萬(wàn)|仟|佰|什>/).grep({.chars}).map({given $_ {when (($l,$f)=.substr($_.chars-1).unival,$_.substr(0,1).unival)[0]==$n {$r=(($t=(($_.chars>1)*$f+$r))%$n+($t-$t%$n)/$n)*$l}
- when $l==10**8 {$r=(($_.chars>1)*$f+$r)*$l}
- default {$r+=[*] $_.comb(/./).map: *.unival}}});$r}
復(fù)制代碼 測(cè)試代碼- say chnToNum("九千零二");
- say chnToNum("七萬(wàn)四千⑵百〇㈤");
- say chnToNum("三億一千Ⅴ百二十萬(wàn)四千五百九十Ⅶ");
- say chnToNum("八千九百四十七萬(wàn)二千三百肆什二億五千六百柒十叁萬(wàn)捌千九百〇一");
- prompt "exit";
復(fù)制代碼 結(jié)果依次是:
9002
74205
315204597
8947234256738901
|
|