2015-05-13 18 views
7

Temel olarak bir Romen rakamını bir tamsayıya çevirecek bir işlev oluşturmaya çalışıyorum. Ben PHP oldukça yeni bu yüzden hala bu yüzden halaTam sayı fonksiyonuna sahip Romen Rakamı

:) öğreniyorum unutmayın lütfen düşünmek yolu alışıyorum olduğum

$roman_numerals=[ 
    'M' => 1000, 
    'CM' => 900, 
    'D' => 500, 
    'CD' => 400, 
    'C' => 100, 
    'XC' => 90, 
    'L' => 50, 
    'XL' => 40, 
    'X' => 10, 
    'IX' => 9, 
    'V' => 5, 
    'IV' => 4, 
    'I' => 1 
]; 

:

Ben bir dizi var i saattir bu olmuştur ve bunun ışığını görmek olurdu gibi

//Array 
function romanToInteger($key) 
{ 
$roman_numerals=[ 
    'M' => 1000, 
    'CM' => 900, 
    'D' => 500, 
    'CD' => 400, 
    'C' => 100, 
    'XC' => 90, 
    'L' => 50, 
    'XL' => 40, 
    'X' => 10, 
    'IX' => 9, 
    'V' => 5, 
    'IV' => 4, 
    'I' => 1 
]; 

$roman = intval($key); 
$result = 0; 

foreach ($roman_numerals as $key => $value) { 
    while (strpos($roman, $key) === 0) { 
     $result += $value; 
     $roman = substr($roman, strlen($key)); 
    } 
} 
var_dump($roman); //test 
echo $result; 
} 

, herhangi bir tavsiye büyük takdir: ya ne ben şimdiye kadar var -

burada fonksiyonudur.

ben

echo romanToInteger('I'); 

ben sadece 0 geri verilmesinde ve benim türüne intval ile ilgisi olan bir şey düşünmek ile komut satırında çalışacak?

Noob olduğum için tekrar özür dilerim, yardım etmekten veya herhangi bir işaretçiden yardım edin!

cevap

4

Evet, intval ile ilgili bir şey var.

Temel olarak roma girişinizi 0 içine alan bir tamsayıya dönüştürüyorsunuz.

o kaldırın:

function romanToInteger($key) 
{ 
    $romans = [ 
     'M' => 1000, 
     'CM' => 900, 
     'D' => 500, 
     'CD' => 400, 
     'C' => 100, 
     'XC' => 90, 
     'L' => 50, 
     'XL' => 40, 
     'X' => 10, 
     'IX' => 9, 
     'V' => 5, 
     'IV' => 4, 
     'I' => 1, 
    ]; 

    $roman = $key; 
    $result = 0; 

    foreach ($romans as $key => $value) { 
     while (strpos($roman, $key) === 0) { 
      $result += $value; 
      $roman = substr($roman, strlen($key)); 
     } 
    } 
    echo $result; 
} 

romanToInteger('IV'); 

Sample Output

+0

Teşekkür! Neden şimdi orada sahip olduğunu düşündüğümden emin değilim ... tekrar teşekkürler şimdi anlıyorum :) –

+0

@CalvinTaylor emin bu yardımcı – Ghost

+0

@Ghost 'romanToInteger ('IV'); . Bu 4 olmalıdır. Roman metotlarında, “I”, ilk değer bir sonraki değerden daha düşükse, “V” den çıkarılır. "VI" ın aksine 6. –