资讯专栏INFORMATION COLUMN

阿拉伯数字转中文数字思路及解决算法(以PHP语言描述)

terro / 1083人阅读

摘要:前段时间在社区看到一个很有意思的题目数字转中文语言描述一开始我是这样写的将一个字符串转换为数组零一二三四五六七八九一二三七一二四一二九一二四然后题主回复我说根据你这个我只能做出来十以内的开始我的理解太过简单,所以又写了一下思路是这样的第一次

前段时间在 segmentfault 社区看到一个很有意思的题目

数字转中文(PHP语言描述)

一开始我是这样写的


然后题主回复我说:根据你这个我只能做出来十以内的

开始我的理解太过简单,所以又写了一下

思路是这样的

第一次写,已经可以把阿拉伯数字翻译为中文数字,但是真正的数都是有数阶(个、十、百、千)的。

显然简单的翻译还不能称之为数

那么思路就来了,计算出每个数的权位,加上权位不就可以了吗

123 翻译为中文就是 一二三

下一步就是加上权位

一位数是个
二位数是十
三位数是千
...

以此类推

这样不就很明显用数组表示最合适不过了

["","十","百","千","万","十","百","千","亿","十","百","千"]

这样遍历的时候简单合并不就Ok 了吗?

先不管对错,试一下(以123为例)

遍历

1=>一 + 
2=>二 + 十
3=>三 + 百

结果为 一二十三百

很明显,权位是反的

有两种解决思路,第一种先判断位数,计算数阶,第二种是反向遍历,从个位遍历起

第二种

php 中 先翻转 123 => 321

遍历之后输出 一十二百三

反转字符串即为正解

PHP 中有很多字符串反转函数,但是中文反转会乱码,使用mb_substr()函数解决中文乱码

完整代码如下

 $value) 
        $str .= $ws[$key].$cns[$value];
    $temp = "";//反转字符串
    for($i = strlen($str)-1; $i>=0; $i--)
        $temp .= mb_substr($str,$i,1,"utf-8");

    return $temp;
}

echo IntToString(231231251237);
////二千三百一十二亿三千一百二十五万一千二百三十七

这次直接支持支持千亿级别的数,修改 ws 数组可以无限扩充

修改$cns数组让这个函数支持,数字大写,支持人民币结算

第一种
//数阶数组
$rank = ["","十","百","千","万","十","百","千"];
//中文数字数组
$cns = ["零","一","二","三","四","五","六","七","八","九"];
//数字转数组
$arr = str_split((string)$num,1);

//获取数阶数组
$nowRank = array_reverse(array_slice($rank,0,strlen($num)));

foreach ($arr as $key => $value) {
    echo $cns[$value].$nowRank[$key];
}

中华语言博大精深

如果输入14 会输出 一十四,而实际我们只会读为十四;
如果输入1000会输出一千零百零十零,而实际我们只会读为一千;
如果输入1020会输出一千零百二十零,而实际我们只会读为一千零二十;

下一步需要解决这些问题,如果解决了,会更新此文

好了,不多说了,接着搬砖了

原文地址:https://blog.codefun.cn/blog/...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30607.html

相关文章

  • PHP 的方式实现的各类算法合集

    摘要:数据项是数据的不可分割的最小单位。数据项是对客观事物某一方面特性的数据描述。数据对象是性质相同的数据元素的集合,是数据的一个子集。数据的逻辑结构数据元素之间的相互关系称为逻辑结构。 项目地址 https://github.com/m9rco/algo... 每周最少一更,求出题,求虐待 At least once a week, ask for problems and abuse 简...

    Karrdy 评论0 收藏0
  • PHP 的方式实现的各类算法合集

    摘要:数据项是数据的不可分割的最小单位。数据项是对客观事物某一方面特性的数据描述。数据对象是性质相同的数据元素的集合,是数据的一个子集。数据的逻辑结构数据元素之间的相互关系称为逻辑结构。 项目地址 https://github.com/m9rco/algo... 每周最少一更,求出题,求虐待 At least once a week, ask for problems and abuse 简...

    pakolagij 评论0 收藏0
  • PHP 的方式实现的各类算法合集

    摘要:数据项是数据的不可分割的最小单位。数据项是对客观事物某一方面特性的数据描述。数据对象是性质相同的数据元素的集合,是数据的一个子集。数据的逻辑结构数据元素之间的相互关系称为逻辑结构。 项目地址 https://github.com/m9rco/algo... 每周最少一更,求出题,求虐待 At least once a week, ask for problems and abuse 简...

    leonardofed 评论0 收藏0
  • 王者编程大赛之一

    摘要:首发于樊浩柏科学院本次王者编程大赛分为个组别,分别为研发测试移动战场。本章只叙述前道相对简单的题目,后续题目及解题思路将在王者编程大赛系列中列出。 首发于 樊浩柏科学院 本次王者编程大赛分为 3 个组别,分别为研发、测试、移动战场。这里只讨论研发战场所考的 题目,本次大赛共有 7 道题,主要考查点为基础算法,解题所用语言不做限制,但是需要在 在线验证平台 使用标准输入并验证通过,最后...

    justCoding 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<