Design a program that accepts an input sequence representing a roman number and outputs its arabic decimal equivilant.
This is a fairly simple question. It took me longer to work out how to generate a random roman number than convert it to arabic!
The solution doesn't have much erorr checking, but it will work fine with a valid roman number.
// these are arabic numbers and their roman equivilant
$arabic_roman = array(
1 => 'I', 5 => 'V', 10 => 'X', 50 => 'L',
100 => 'C', 500 => 'D', 1000 => 'M'
// ** generate roman number
// store all the roman numerals in an array
$symbols = array_values(array_reverse($arabic_roman));
// loop through each roman symbol
foreach($symbols as $symbol)
// add none or one of that symbol to the roman number
$roman .= str_repeat($symbol, mt_rand(0, 1));
// if it's empty
// just use one
$roman = 'I';
// ** convert to arabic
// loop through all the letters in the roman number
for ($n = 0; $n < strlen($roman); $n++)
// check if this is a one
// this isn't the end
// the next character isn't also a one
if ($roman[$n] == 'I' && $n <> strlen($roman)-1 && $roman[$n+1] <> 'I')
// skip this and add the next minus one
$number = array_search($roman[++$n], $arabic_roman)-1;
// get the arabic equvilant
$number = array_search($roman[$n], $arabic_roman);
// add the current number to the running total
$total += $number;
// display the original roman number and its arabic equivilant
echo 'The roman number ' . $roman . ' is ' . $total . ' in arabic';
The roman number MDCXI is 1611 in arabic