`
阿尔萨斯
  • 浏览: 4106966 次
社区版块
存档分类
最新评论

输入一个1~9位的数字,打印中文,注意特殊情况

 
阅读更多
题目:输入一个1~9位的数字,打印中文,注意特殊情况
例如:输入7,打印 七;123,打印 一百二十三;142505588,打印 一亿四千二百五十万五千五百八十八

自己花了一个晚上才搞出来- -!

$num = "142505588";//九位数

/*
这两个函数重写了,采用了内置函数和数组。
function del0($num) //去掉数字段前面的0
{
$flag = 0;
$str = '';
for($i=0; $i<strlen($num); $i++)
{
if($num{$i} == '0' && $flag == 0)
continue;
elseif($num{$i} != '0')
{
$str = $str.$num{$i};
$flag = 1;
}else{
$str = $str.$num{$i};
}
}
return $str;
}

function n2c($x) //单个数字变汉字
{
switch($x)
{
case '0': $ch = '零'; break;
case '1': $ch = '一'; break;
case '2': $ch = '二'; break;
case '3': $ch = '三'; break;
case '4': $ch = '四'; break;
case '5': $ch = '五'; break;
case '6': $ch = '六'; break;
case '7': $ch = '七'; break;
case '8': $ch = '八'; break;
case '9': $ch = '九'; break;
}
return $ch;
}
*/
function del0($num) //去掉数字段前面的0
{
return ''.intval($num);
}

function n2c($x) //单个数字变汉字
{
$arr_n = array('零','一','二','三','四','五','六','七','八','九','十');
return $arr_n[$x];
}

function num_r($abcd) //读取数值(4位)
{
$arr = array();
$str = ''; //读取后的汉字数值
$flag = 0; //该位是否为零
$flag_end = 1; //是否以“零”结尾
$size_r = strlen($abcd);
for($i=0; $i<$size_r; $i++)
{
$arr[$i] = $abcd{$i};
}
$arrlen = count($arr);
for($j=0; $j<$arrlen; $j++)
{
$ch = n2c($arr[$arrlen-1-$j]); //从后向前转汉字
if($ch == '零' && $flag == 0){ //如果是第一个零
$flag = 1; //该位为零
$str = $ch.$str; //加入汉字数值字符串
continue;
}elseif($ch == '零'){ //如果不是第一个零了
continue;
}
$flag = 0; //该位不是零
switch($j) //从后向前依次读取各位
{
case 0: $str = $ch; $flag_end = 0; break; //第一位(末尾),没有以“零”结尾
case 1: $str = $ch.'十'.$str; break; //第二位
case 2: $str = $ch.'百'.$str; break; //第三位
case 3: $str = $ch.'千'.$str; break; //第四位
}
}

mb_internal_encoding("UTF-8");
if($flag_end == 1) //如果以“零”结尾
{
$str = mb_substr($str, 0, mb_strlen($str)-1); //把“零”去掉
}
if($arrlen == 2 && $abcd[0] == '1')
{
$str = mb_substr($str, 1, 1); //如果“一十”,保留成“十”
}
return $str;
}

function num2ch($num) //整体读取转换
{
$num_real = del0($num);//去掉前面的“0”
$numlen = strlen($num_real);
if($numlen == 9)//如果满九位,读取“亿”位
{
$y = substr($num_real, -9, 1);
$wsbq = substr($num_real, -8, 4);
$gsbq = substr($num_real, -4);

$a = num_r(del0($gsbq));
num_r(del0($wsbq)) != '' && $b = num_r(del0($wsbq)).'万';
$c = num_r(del0($y)).'亿';
}elseif($numlen <= 8 && $numlen >= 5) //如果大于等于“万”
{
$wsbq = substr($num_real, 0, $numlen-4);
$gsbq = substr($num_real, -4);

$a = num_r(del0($gsbq));
$b = num_r(del0($wsbq)).'万';
}elseif($numlen <= 4) //如果小于等于“千”
{
$gsbq = substr($num_real, -$numlen);
$a = num_r(del0($gsbq));
}
$ch_num = $c.$b.$a;
return $ch_num;
}


echo $num.'<br />'; //数字
echo num2ch($num); //汉字
分享到:
评论

相关推荐

    打印特殊三角形.py

    7-23 打印特殊三角形 (30...输入一个数字n,输出一个n层的特定三角形,三角形内数字增长是有规律的。 输入格式: 1个整数n,1 输出格式: 特定样式三角形 输入样例: 5 输出样例: 1 6 10 13 15 2 7 11 14 3 8 12 4 9 5

    javascript入门笔记

    1、声明一个变量 r ,来表示一个圆的半径,并赋值 2、声明一个常量PI ,来表示圆周率3.14 3、通过 r 和 PI 来计算 该圆的周长,保存在变量l中 周长 = 2 * π * 半径 4、通过 r 和 PI 来计算 该圆的面积,保存在...

    java 经典习题.doc

    题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。 1.程序分析:利用for循环控制100-999个数,...

    第四届 蓝桥杯 竞赛试题题目 C/C++高职高专组

     假设 a b c d e 代表1~9不同的5个数字(注意是各不相同的数字,且不含0)    能满足形如: ab * cde = adb * ce 这样的算式一共有多少种呢?      请你利用计算机的优势寻找所有的可能,并回答不同算式的种类...

    Java经典编程题(附答案)

    1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 【程序12】 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元...

    C语言经典例题100道

    85.判断一个素数能被几个9整除 86.两个字符串连接程序 87.结构体变量传递 88.读取数字的整数值并打印出该值个数的* 89.数据加密 90.专升本一题 91.时间函数举例1 92.时间函数举例2 93.时间函数举例3 94.一个猜数...

    中文简体压缩软件RAR 6.0

    包含两个掩码,并且所有文件及匹配第一个掩码,也匹配第二个掩码, 第一个掩码 将拥有更高的优先权,即使它被放到第二个后面。例如,存在*.cpp 和 f*.cpp 掩码 的情况下,f*.cpp 拥有更高的优先权。 RAR ...

    Excel17:单元格数字格式设置:特殊格式、插入批注.wmv

    Excel电子表格可以输入输出、显示数据,也利用公式计算一些简单的加减法。可以帮助用户制作各种复杂的表格文档,进行繁琐的数据计算,并能对输入的数据进行各种复杂统计运算后显示为可视性极佳的表格,同时它还能...

    操作系统精髓与设计原理答案

    在这种情况下,12位地址标识一个特殊的外部设备。请给出以下程序的执行过程(按照图1.4的格式): 1. 从设备5中载入AC。 2. 加上存储器单元940的内容。 3. 把AC保存到设备6中。 假设从设备5中取到的下一个值为3940...

    excel的使用

    假如某公司采用一个特殊的数学公式计算产品购买者的折扣,如果有一个函数来计算岂不更方便?下面就说一下如何创建这样的自定义函数。自定义函数,也叫用户定义函数,是Excel最富有创意和吸引力的功能之一,下面我们...

    语言程序设计课后习题答案

    2-18 编写一个程序,运行时提示输入一个数字,再把这个数字显示出来。 解: 源程序: #include &lt;iostream.h&gt; int main() { int i; cout 请输入一个数字:"; cin &gt;&gt; i; cout 您输入一个数字是" ; return 0; } 程序...

    进玉电极模块_v5.0_nx4.0_简体版

    ④给多个铜公命名:“起始的铜公名称”为第一个铜公的名称,名称的最后一个字符必须是数字,下一个的铜公名称在此基础上加1(递增)。“铜公命名时跳过空层”是指在“从层”到“到层”之间有的层中没有铜公(实体),...

    用go实现《c语言经典算法》中的100个例子.rar

    【题目1】:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 【题目2】:企业发放的奖金根据利润提成。 【题目3】:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数...

    正则表达式30分钟入门教程

    要理解这个表达式,请按下列顺序分析它:\d{1,3}匹配1到3位的数字,(\d{1,3}\.){3}匹配三位数字加上一个英文句号(这个整体也就是这个分组)重复3次,最后再加上一个一到三位的数字(\d{1,3})。 IP地址中每个数字都不能...

    c 语言基础100题资源汇总

    题目1:有 1、2、3、4 四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 题目2:企业发放的奖金根据利润提成。 利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元...

    大华条码秤说明书

    一、条码打印计价秤概述 1 1.1 开箱检查 1 1.2 外观 1 1. 2. 1 电子秤外观图 1 1. 2. 2 电子秤各接口图 2 1.3 安装 2 1.4 显示和键盘 3 1. 4. 1 显示 3 1. 4. 2 键盘 4 1.5 打印机 5 1.5.1 打印机条码标签纸 ...

    删除特殊字符和限定用户输入长度的示例代码

    代码如下: /检查非法字符并检验字符长度 function checkSpeChar(obj, byteLength, title) { var value = document.getElementById(obj).value; value = value.replace(/(^\s*)/g, “”).replace(/(\s*$)/g, “”);...

    Excel新增工具集

    1、制作工资条(成绩条)和工资簿(成绩簿):一张员工工资表 (学生成绩表)是由同一工作表中的同一单行或多行的表头下共存的若干条记录组成,要把单人的工资 (成绩)发给本人,用本软件可轻松地将每条记录分离,并在...

    python练习题 :用户任意输入10个整数到列表中,然后由大到小排列并输出。

    1.python是一种面向_对象 __的高级语言。 2.python可以在多种平台运行,这体现了python的___可移植___特性。 3.python源代码被解释器转换后的格式为___.pyc______。 4.python3.x默认使用的编码是_UTF-8________。 5....

    入门学习Linux常用必会60个命令实例详解doc/txt

    所以这个选项当然没有时间参数,但是可以输入一个用来解释的讯息,而这信息将会送到每位使用者。 -F:在重启计算机时强迫fsck。 -time:设定关机前的时间。 -m: 将系统改为单用户模式。 -i:关机时显示系统...

Global site tag (gtag.js) - Google Analytics