摘要:前段時(shí)間在社區(qū)看到一個(gè)很有意思的題目數(shù)字轉(zhuǎn)中文語(yǔ)言描述一開(kāi)始我是這樣寫的將一個(gè)字符串轉(zhuǎn)換為數(shù)組零一二三四五六七八九一二三七一二四一二九一二四然后題主回復(fù)我說(shuō)根據(jù)你這個(gè)我只能做出來(lái)十以內(nèi)的開(kāi)始我的理解太過(guò)簡(jiǎn)單,所以又寫了一下思路是這樣的第一次
前段時(shí)間在 segmentfault 社區(qū)看到一個(gè)很有意思的題目
數(shù)字轉(zhuǎn)中文(PHP語(yǔ)言描述)
一開(kāi)始我是這樣寫的
</>復(fù)制代碼
然后題主回復(fù)我說(shuō):根據(jù)你這個(gè)我只能做出來(lái)十以內(nèi)的
開(kāi)始我的理解太過(guò)簡(jiǎn)單,所以又寫了一下
思路是這樣的
第一次寫,已經(jīng)可以把阿拉伯?dāng)?shù)字翻譯為中文數(shù)字,但是真正的數(shù)都是有數(shù)階(個(gè)、十、百、千)的。
顯然簡(jiǎn)單的翻譯還不能稱之為數(shù)
那么思路就來(lái)了,計(jì)算出每個(gè)數(shù)的權(quán)位,加上權(quán)位不就可以了嗎
123 翻譯為中文就是 一二三
下一步就是加上權(quán)位
一位數(shù)是個(gè)
二位數(shù)是十
三位數(shù)是千
...
以此類推
這樣不就很明顯用數(shù)組表示最合適不過(guò)了
</>復(fù)制代碼
["","十","百","千","萬(wàn)","十","百","千","億","十","百","千"]
這樣遍歷的時(shí)候簡(jiǎn)單合并不就Ok 了嗎?
先不管對(duì)錯(cuò),試一下(以123為例)
遍歷
</>復(fù)制代碼
1=>一 +
2=>二 + 十
3=>三 + 百
結(jié)果為 一二十三百
很明顯,權(quán)位是反的
有兩種解決思路,第一種先判斷位數(shù),計(jì)算數(shù)階,第二種是反向遍歷,從個(gè)位遍歷起
第二種
php 中 先翻轉(zhuǎn) 123 => 321
遍歷之后輸出 一十二百三
反轉(zhuǎn)字符串即為正解
PHP 中有很多字符串反轉(zhuǎn)函數(shù),但是中文反轉(zhuǎn)會(huì)亂碼,使用mb_substr()函數(shù)解決中文亂碼
完整代碼如下
</>復(fù)制代碼
$value)
$str .= $ws[$key].$cns[$value];
$temp = "";//反轉(zhuǎn)字符串
for($i = strlen($str)-1; $i>=0; $i--)
$temp .= mb_substr($str,$i,1,"utf-8");
return $temp;
}
echo IntToString(231231251237);
////二千三百一十二億三千一百二十五萬(wàn)一千二百三十七
這次直接支持支持千億級(jí)別的數(shù),修改 ws 數(shù)組可以無(wú)限擴(kuò)充
修改$cns數(shù)組讓這個(gè)函數(shù)支持,數(shù)字大寫,支持人民幣結(jié)算
第一種
</>復(fù)制代碼
//數(shù)階數(shù)組
$rank = ["","十","百","千","萬(wàn)","十","百","千"];
//中文數(shù)字?jǐn)?shù)組
$cns = ["零","一","二","三","四","五","六","七","八","九"];
//數(shù)字轉(zhuǎn)數(shù)組
$arr = str_split((string)$num,1);
//獲取數(shù)階數(shù)組
$nowRank = array_reverse(array_slice($rank,0,strlen($num)));
foreach ($arr as $key => $value) {
echo $cns[$value].$nowRank[$key];
}
</>復(fù)制代碼
中華語(yǔ)言博大精深
如果輸入14 會(huì)輸出 一十四,而實(shí)際我們只會(huì)讀為十四;
如果輸入1000會(huì)輸出一千零百零十零,而實(shí)際我們只會(huì)讀為一千;
如果輸入1020會(huì)輸出一千零百二十零,而實(shí)際我們只會(huì)讀為一千零二十;
下一步需要解決這些問(wèn)題,如果解決了,會(huì)更新此文
好了,不多說(shuō)了,接著搬磚了
原文地址:https://blog.codefun.cn/blog/...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/30607.html
摘要:數(shù)據(jù)項(xiàng)是數(shù)據(jù)的不可分割的最小單位。數(shù)據(jù)項(xiàng)是對(duì)客觀事物某一方面特性的數(shù)據(jù)描述。數(shù)據(jù)對(duì)象是性質(zhì)相同的數(shù)據(jù)元素的集合,是數(shù)據(jù)的一個(gè)子集。數(shù)據(jù)的邏輯結(jié)構(gòu)數(shù)據(jù)元素之間的相互關(guān)系稱為邏輯結(jié)構(gòu)。 項(xiàng)目地址 https://github.com/m9rco/algo... 每周最少一更,求出題,求虐待 At least once a week, ask for problems and abuse 簡(jiǎn)...
摘要:數(shù)據(jù)項(xiàng)是數(shù)據(jù)的不可分割的最小單位。數(shù)據(jù)項(xiàng)是對(duì)客觀事物某一方面特性的數(shù)據(jù)描述。數(shù)據(jù)對(duì)象是性質(zhì)相同的數(shù)據(jù)元素的集合,是數(shù)據(jù)的一個(gè)子集。數(shù)據(jù)的邏輯結(jié)構(gòu)數(shù)據(jù)元素之間的相互關(guān)系稱為邏輯結(jié)構(gòu)。 項(xiàng)目地址 https://github.com/m9rco/algo... 每周最少一更,求出題,求虐待 At least once a week, ask for problems and abuse 簡(jiǎn)...
摘要:數(shù)據(jù)項(xiàng)是數(shù)據(jù)的不可分割的最小單位。數(shù)據(jù)項(xiàng)是對(duì)客觀事物某一方面特性的數(shù)據(jù)描述。數(shù)據(jù)對(duì)象是性質(zhì)相同的數(shù)據(jù)元素的集合,是數(shù)據(jù)的一個(gè)子集。數(shù)據(jù)的邏輯結(jié)構(gòu)數(shù)據(jù)元素之間的相互關(guān)系稱為邏輯結(jié)構(gòu)。 項(xiàng)目地址 https://github.com/m9rco/algo... 每周最少一更,求出題,求虐待 At least once a week, ask for problems and abuse 簡(jiǎn)...
摘要:首發(fā)于樊浩柏科學(xué)院本次王者編程大賽分為個(gè)組別,分別為研發(fā)測(cè)試移動(dòng)戰(zhàn)場(chǎng)。本章只敘述前道相對(duì)簡(jiǎn)單的題目,后續(xù)題目及解題思路將在王者編程大賽系列中列出。 首發(fā)于 樊浩柏科學(xué)院 本次王者編程大賽分為 3 個(gè)組別,分別為研發(fā)、測(cè)試、移動(dòng)戰(zhàn)場(chǎng)。這里只討論研發(fā)戰(zhàn)場(chǎng)所考的 題目,本次大賽共有 7 道題,主要考查點(diǎn)為基礎(chǔ)算法,解題所用語(yǔ)言不做限制,但是需要在 在線驗(yàn)證平臺(tái) 使用標(biāo)準(zhǔn)輸入并驗(yàn)證通過(guò),最后...
閱讀 2877·2023-04-26 02:49
閱讀 3451·2021-11-25 09:43
閱讀 3421·2021-10-09 09:43
閱讀 3003·2021-09-28 09:44
閱讀 2454·2021-09-22 15:29
閱讀 4527·2021-09-14 18:02
閱讀 2787·2021-09-03 10:48
閱讀 3432·2019-08-30 12:47