PHP(4)“羅馬數字轉整數”演算法問題

來源:互聯網
上載者:User

標籤:length   split   UNC   i+1   pre   規則   str   一個   適用於   

原題目是這樣的:羅馬數字包含以下七種字元:I, V, X, L,C,D 和 M。I=1,V=5,X=10,L=50,C=100,D=500,M=1000例如, 羅馬數字 2 寫做 II ,即為兩個並列的 1。12 寫做 XII ,即為 X + II 。 27 寫做 XXVII, 即為 XX + V + II 。通常情況下,羅馬數字中小的數字在大的數位右邊。但也存在特例,例如 4 不寫做 IIII,而是 IV。數字 1 在數字 5 的左邊,所表示的數等於大數 5 減小數 1 得到的數值 4 。同樣地,數字 9 表示為 IX。這個特殊的規則只適用於以下六種情況:
  • I 可以放在 V (5) 和 X (10) 的左邊,來表示 4 和 9。
  • X 可以放在 L (50) 和 C (100) 的左邊,來表示 40 和 90。
  • C 可以放在 D (500) 和 M (1000) 的左邊,來表示 400 和 900。
  • 給定一個羅馬數字,將其轉換成整數。輸入確保在 1 到 3999 的範圍內。
  • 樣本1:

    輸入:“III”
    輸出:3

  • 樣本2:

    輸入:“IV”
    輸出:4

  • 樣本1:

    輸入:“MCMXCIV”
    輸出:1994

class test{    public function a5($str)        {            $num = 0;            $num_arr = str_split($str);            $length = count($num_arr);            for ($i=0; $i < $length; $i++)             {                 switch ($num_arr[$i])                 {                    case ‘I‘:                            switch ($num_arr[$i+1])                             {                                case ‘V‘:                                    $num += 4;                                    $i++;                                    break;                                case ‘X‘:                                    $num += 9;                                    $i++;                                    break;                                default:                                    $num += 1;                                    break;                            }                        break;                    case ‘V‘:                        $num += 5;                        break;                    case ‘X‘:                            switch ($num_arr[$i+1])                             {                                case ‘L‘:                                    $num += 40;                                    $i++;                                    break;                                case ‘C‘:                                    $num += 90;                                    $i++;                                    break;                                default:                                    $num += 10;                                    break;                            }                        break;                    case ‘L‘:                        $num += 50;                        break;                    case ‘C‘:                            switch ($num_arr[$i+1])                             {                                case ‘D‘:                                    $num += 400;                                    $i++;                                    break;                                case ‘M‘:                                    $num += 900;                                    $i++;                                    break;                                default:                                    $num += 100;                                    break;                            }                        break;                    case ‘D‘:                        $num += 500;                        break;                    case ‘M‘:                        $num += 1000;                        break;                    default:                        break;                }            }            echo $num;        }}

PHP(4)“羅馬數字轉整數”演算法問題

相關文章

Alibaba Cloud 10 Year Anniversary

With You, We are Shaping a Digital World, 2009-2019

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。