Tuesday, June 14, 2011

Roman to Number conversion

            function toNumber($roman)
            {
                $conv = array(
                    array("letter" => 'I', "number" => 1),
                    array("letter" => 'V', "number" => 5),
                    array("letter" => 'X', "number" => 10),
                    array("letter" => 'L', "number" => 50),
                    array("letter" => 'C', "number" => 100),
                    array("letter" => 'D', "number" => 500),
                    array("letter" => 'M', "number" => 1000),
                    array("letter" => 0,   "number" => 0)
                );
                $arabic = 0;
                $state  = 0;
                $sidx   = 0;
                $len    = strlen($roman);

                while ($len >= 0) {
                    $i = 0;
                    $sidx = $len;

                    while ($conv[$i]['number'] > 0) {
                        if (strtoupper($roman[$sidx]) == $conv[$i]['letter']) {
                            if ($state > $conv[$i]['number']) {
                                $arabic -= $conv[$i]['number'];
                            } else {
                                $arabic += $conv[$i]['number'];
                                $state   = $conv[$i]['number'];
                            }
                        }
                        $i++;
                    }
                    $len--;
                }
                return($arabic);
            }


No comments:

Post a Comment