一道php算法

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

 

例如:输入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; //第四位
        
}
    }

    if(
$flag_end == 1//如果以“零”结尾
    
{
        
mb_internal_encoding("UTF-8");
        
$str mb_substr($str0mb_strlen($str)-1); //把“零”去掉
    
}
    return 
$str;
}

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

        
$a num_r(del0($gsbq));
        
$b num_r(del0($wsbq)).'万';
        
$c num_r(del0($y)).'亿';
    }elseif(
$numlen <= && $numlen >= 5//如果大于等于“万”
    
{
        
$wsbq substr($num_real0$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); //汉字


 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值