2015-05-13 21 views
7

về cơ bản tôi đang cố gắng tạo một hàm sẽ biến số La Mã thành một số nguyên.Số La Mã đến hàm số nguyên

Tôi có một mảng:

$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 
]; 

Tôi khá mới để PHP vì vậy tôi vẫn quen với cách nghĩ vì vậy hãy ghi nhớ tôi vẫn đang học :)

đây là chức năng của tôi - hoặc những gì tôi có cho đến nay:

//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; 
} 

tôi đã được lúc này trong nhiều giờ và sẽ giống như nhìn thấy ánh sáng của nó, lời khuyên nào sẽ được đánh giá rất nhiều.

khi tôi chạy nó trong dòng lệnh với

echo romanToInteger('I'); 

tôi chỉ có được trả lại 0 và tôi nghĩ rằng một cái gì đó để làm với intval của tôi?

Xin lỗi một lần nữa vì đã trở thành một noob, giúp đánh giá cao dù hoặc bất kỳ gợi ý nào! :)

Trả lời

4

Có điều gì đó liên quan đến intval.

Về cơ bản, bạn nhập đầu vào la mã của mình vào một số nguyên sẽ hiển thị số đó thành 0.

Di rằng:

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

Cảm ơn! Không quá chắc chắn lý do tại sao tôi nghĩ đến việc có nó ở đó bây giờ ... cảm ơn một lần nữa tôi hiểu nó ngay bây giờ :) –

+0

@CalvinTaylor chắc chắn vui vì điều này đã giúp – Ghost

+0

@Ghost 'romanToInteger ('IV');' kết quả đầu ra 10 trong dán codepad cập nhật của bạn . Đó là 4. Trong phương thức Roman, 'I' được trừ từ' V' nếu giá trị đầu tiên thấp hơn giá trị tiếp theo. Trái ngược với 'VI' sẽ là 6. –

Các vấn đề liên quan