php - Soalan temu bual, tukar nombor dalam lingkungan 100 ke dalam bahasa Cina..
PHP中文网
PHP中文网 2017-06-14 10:50:09
0
6
931

Cara menukar nombor dengan cepat kepada teks
Sebagai contoh, 1 => satu, 2=> dua, ..., 15=》lima belas
Apa yang sedang saya fikirkan ialah untuk menyimpan aksara Cina ke dalam tatasusunan

$arr = ['一','二','三','四','五','六','七','八','九','十'];

Tetapi ini terlalu menyusahkan Bagaimana untuk menukar nombor input ke dalam bahasa Cina?

Keputusan akhir adalah seperti berikut:
Input 12
Output

 一二三四五六七八九十十一十二
PHP中文网
PHP中文网

认证高级PHP讲师

membalas semua(6)
淡淡烟草味
<?php
        $number=57;
        $arr=array(

                '1'    =>    '一',
                '2'    =>    '二',
                '3'    =>    '三',
                '4'    =>    '四',
                '5'    =>    '五',
                '6'    =>    '六',
                '7'    =>    '七',
                '8'    =>    '八',
                '9'    =>    '九',
                '10'    =>    '十',

            );
        if($number>10){
            //倍数
            $bs    =    (int)($number/10);
            //余数
            $ys    =    $number%10;
            echo $arr[$bs].$arr[10].$arr[$ys];

        }else{
            echo $arr[$number];

        }

    
过去多啦不再A梦

Jika anda boleh menerangkan proses penukaran digital dengan jelas dalam perkataan, maka menulis kod ialah proses terjemahan.

Algoritma sebenarnya hanyalah logik perniagaan dengan logik perniagaan yang sangat pelik Fokusnya adalah untuk menganalisis logik perniagaan

ini

Anda boleh menukar angka Arab kepada angka Cina walaupun sebelum anda menamatkan sekolah rendah Anda mesti mempunyai kaedah dalam fikiran anda untuk menyelesaikan proses penukaran ini. Jadi fokus penyiasatan di sini ialah abstraksiproses masalah. Untuk menjadi abstrak dan tepat, anda mesti terlebih dahulu mempunyai analisis dan pemahaman yang komprehensif tentang masalah itu sendiri dan mengetahui peraturannya. Dalam proses penukaran digital, bila 0 dipanggil sepuluh dan bila dipanggil sifar. Proses ini sangat semula jadi dalam fikiran bahawa ia masih memerlukan sejumlah keupayaan untuk menganalisis keadaannya dan mengetahui peraturannya.

Saya mengesyorkan artikel ini Analisis pada permulaan artikel adalah proses abstraksi, yang sangat penting untuk pengaturcaraan

漂亮男人
$setnumber = 99;
        $chiNum = array('十','一','二','三','四','五','六','七','八','九','十');
        if($setnumber < 100 && $setnumber >= 1) {
            for($i = 1;$i<=$setnumber;$i++) {
                $setstrnumber = (string)$i;
                $count = strlen($setstrnumber);
                if($count == 1) {
                    echo $chiNum[$i]."<br/>"; 
                } else {
                    $setchinum = '';
                    if($setstrnumber[0] != 1) {                      
                        $setchinum .= $chiNum[$setstrnumber[0]];
                    }
                    $setchinum .= $chiNum[0];
                    
                    if(intval($setstrnumber[1]) != 0) {
                        $setchinum .= $chiNum[$setstrnumber[1]];
                    }
                    echo $setchinum."<br/>";
                }
            }
        }
Ty80

Cara menukar nombor dengan cepat kepada teks
Sebagai contoh, 1 => satu, 2=> dua, ..., 15=》lima belas
Apa yang sedang saya fikirkan ialah untuk menyimpan aksara Cina ke dalam tatasusunan

$arr = ['一','二','三','四','五','六','七','八','九','十'];

Tetapi ini terlalu menyusahkan Bagaimana untuk menukar nombor input ke dalam bahasa Cina?

Keputusan akhir adalah seperti berikut:
Input 12
Output

一二三四五六七八九十十一十二

Berikut adalah pelaksanaan JavaScript

Perhatikan perwakilan berangka aksara Cina

Aksara Cina secara eksplisit menyatakan susunan nombor Contohnya, 一百零一 mempunyai susunan ratusan (seratus, seratus, sepuluh, juta)

.

2 >>>> Dua 2 >>>> 二个
10 >>>> 一十 >>>> 10 >>>> > kod> >>>>

16 >>>> 一十 六个 >>>> 十六

105 >>>> 一百 零十 五个 >>>> 一百零五

1024 >>>> 一千 零百 二十 四个 >>>> 一千零二十四

Anda boleh melihat bahawa perwakilannya boleh dilihat sebagai bentuk 值 + 阶.

Selain itu, apabila syarat berikut dipenuhi 需要省略阶或者值

10 sepadan dengan 十十 dan ditulis sebagai 10 对应 一十 写作
110 对应 一百一十零个 写作 一百一十110 sepadan dengan seratus dan sepuluh code> Menulis Seratus Sepuluh
.... Tunggu

Berdasarkan pemikiran di atas, idea pengaturcaraan yang perlu dilukis adalah seperti berikut:

  1. Masukkan nombor n

  2. Peta n 映射到一个数组 tokens 上。 比如 8 变成 ["八"], 101 变成 ["一", "零", "一"] kepada tatasusunan token. Contohnya, 8 menjadi ["八"], 101 menjadi ["一", "zero", "一"]

  3. Tambah tahap 101 变成 ["一", "百", "十", "零", "一", "个"]

  4. Tapis, seperti Seratus satu ke dalam bentuk termudah 一百十零一个 变成最简形式 一百零一

Fungsi alat

// 数字到汉字的映射表 
var mapHans = ['零', '一','二','三','四','五','六','七','八','九','十'];

// 用 n 得到汉字 输入 0 得到 '零'
var getHans = n => mapHans[n]; 

// 数字长度到汉字数级的映射表 
var mul = ['十', '百', '千', '万']

// ['i', 'love', 'my', 'wife'] >>>> ilovemywife 
var arr2str = arr => arr.join(''); 

// 输入 5 产生 [1, 2, 3, 4, 5]
var arrGenerator = n => (
    new Array(n).fill(0).map((e, idx) => idx + 1)
)

Tercapai

Pertama dilaksanakan 大于 10数字映射到汉字的数制 pada

Sebagai contoh, masukkan 101 untuk kembali 101 返回 一百零一

Ia akan menjadi lebih pantas untuk menggunakan fungsi alat yang ditulis di atas

var toHans = n => {
    // 比如输入 101 返回 ['一', '零', '一']
    var tokens = n.toString().split('').map(getHans); 
    
    // 对数阶的处理  如果上一步得到 ['一', '零', '一'] 
    // 那么at就是 ['百', '十']
    var at = mul.slice(0, tokens.length - 1).reverse();   
    
    // 归约 
    return tokens.reduce((acc, cur) => {
        acc.push(cur); 
        acc.push( at.shift() )
        
        return acc; 
        
        // 这个reduce将会把 tokens 和 at 耦合在一块 
        // ['一', '零', '一']  和 ['百', '十'] 耦合就是: 
        // ['一', '百', '零', '十', '一', undefined]
        // 下一步的两个 filter 就是要剔除多余的项 
    }, []).filter(e => e !== undefined).filter((e, idx, its) => {
        if (e === '零'){
            if (idx === its.length - 1) {
                // 针对 10 >>>> [一 十 零] 这种情况
                return false; 
            } else {
                // 针对 101 >>>> [一 百 零 十 一] 这种情况 
                its[idx + 1] = null;
            }
        } else if (idx === 0 && e === '一' && its[idx + 1] === '十'){
            // 针对 12 >>>> [一 十 二] 这种情况 
            return false; 
        }
        // 下面还可以再添加。。 不过应该没了。
        return e; 
    }); 
};

Ujian mudah Ujian penukaran 2 4 6 8 16 32 ... 成 十六 三十二 ...

// 2 的 n 次方  
var twotwotwo = n => (
    new Array(n).fill(2).reduce((acc, cur, idx) => {
        acc = acc * cur; 
        return acc; 
    }, 1)
)

// 打印机 
var logger = (item, idx) => console.log(`第 ${idx + 1} 个:`, item); 

// test code 
function test4toHans(n) {
    var res = arrGenerator(n).map(twotwotwo).map(toHans).map(arr2str); 
    res.forEach(logger); 
}

Melintasi nombor

....dari 1 hingga n

var main = n => {
    var numbers = arrGenerator(n); 
    
    return numbers.map(toHans).map(arr2str); 
} 

Ujian


过去多啦不再A梦

https://github.com/wilon/php-...

Nombor PHP ditukar kepada huraian aksara Cina, dan RMB ditulis dengan huruf besar

伊谢尔伦

Menyokong ratusan bilion nombor Mengubah suai tatasusunan ws boleh dikembangkan secara tidak terhingga Mengubah suai tatasusunan cns kepada Cina Tradisional boleh digunakan untuk menggunakan modal RMB

<?php

function IntToString($num)
{
    $cns = ['零','一','二','三','四','五','六','七','八','九'];

    $ws = ['','十','百','千','万','十','百','千','亿','十','百','千'];

    $str = '';
    foreach (array_reverse(str_split((string)$num,1)) as $key => $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);
////二千三百一十二亿三千一百二十五万一千二百三十七
Dilampirkan ideanya

/a/11...

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!