一道php算法

http://www.phpchina.com/?action/viewspace/itemid/29112.html

例如:输入7,打印 七;123,打印 一百二十三;142505588,打印 一亿四千二百五十万五千五百八十八

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

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

/*
这两个函数重写了,采用了内置函数和数组。
functiondel0($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;
}

functionn2c($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;
}
*/
functiondel0($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;//第一位(末尾),没有以“零”结尾
case1:$str=$ch.'十'.$str;break;//第二位
case2:$str=$ch.'百'.$str;break;//第三位
case3:$str=$ch.'千'.$str;break;//第四位
}
}

if(
$flag_end==1)//如果以“零”结尾
{
mb_internal_encoding("UTF-8");
$str=mb_substr($str,0,mb_strlen($str)-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));
$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/>';//数字
echonum2ch($num);//汉字


你可能感兴趣的:(PHP)