Php Program For Converting Roman Numerals To Decimal Lying Between 1 to 3999
Last Updated :
03 Jan, 2022
Given a Romal numeral, the task is to find its corresponding decimal value.
Example :Â
Input: IX
Output: 9
IX is a Roman symbol which represents 9
Input: XL
Output: 40
XL is a Roman symbol which represents 40
Input: MCMIV
Output: 1904
M is a thousand,
CM is nine hundred and
IV is four
Roman numerals are based on the following symbols. Â
SYMBOL VALUE
I 1
IV 4
V 5
IX 9
X 10
XL 40
L 50
XC 90
C 100
CD 400
D 500
CM 900
M 1000
Approach: A number in Roman Numerals is a string of these symbols written in descending order(e.g. M’s first, followed by D’s, etc.). However, in a few specific cases, to avoid four characters being repeated in succession(such as IIII or XXXX), subtractive notation is often used as follows:Â
- I placed before V or X indicates one less, so four is IV (one less than 5) and 9 is IX (one less than 10).
- X placed before L or C indicates ten less, so forty is XL (10 less than 50) and 90 is XC (ten less than a hundred).
- C placed before D or M indicates a hundred less, so four hundred is CD (a hundred less than five hundred) and nine hundred is CM (a hundred less than a thousand).
Algorithm to convert Roman Numerals to Integer Number:Â Â
- Split the Roman Numeral string into Roman Symbols (character).
- Convert each symbol of Roman Numerals into the value it represents.
- Take symbol one by one from starting from index 0:Â
- If current value of symbol is greater than or equal to the value of next symbol, then add this value to the running total.
- else subtract this value by adding the value of next symbol to the running total.
Following is the implementation of the above algorithm:Â
PHP
<?php
function value( $r )
{
if ( $r == 'I' )
return 1;
if ( $r == 'V' )
return 5;
if ( $r == 'X' )
return 10;
if ( $r == 'L' )
return 50;
if ( $r == 'C' )
return 100;
if ( $r == 'D' )
return 500;
if ( $r == 'M' )
return 1000;
return -1;
}
function romanToDecimal(& $str )
{
$res = 0;
for ( $i = 0; $i < strlen ( $str ); $i ++)
{
$s1 = value( $str [ $i ]);
if ( $i +1 < strlen ( $str ))
{
$s2 = value( $str [ $i + 1]);
if ( $s1 >= $s2 )
{
$res = $res + $s1 ;
}
else
{
$res = $res + $s2 - $s1 ;
$i ++;
}
}
else
{
$res = $res + $s1 ;
$i ++;
}
}
return $res ;
}
$str = "MCMIV" ;
echo
"Integer form of Roman Numeral is " ,
romanToDecimal( $str ), "" ;
?>
|
Output:
Integer form of Roman Numeral is 1904
Complexity Analysis:Â
- Time Complexity: O(n), where n is the length of the string.Â
Only one traversal of the string is required.
- Space Complexity: O(1).Â
As no extra space is required.
Please refer complete article on Converting Roman Numerals to Decimal lying between 1 to 3999 for more details!
Share your thoughts in the comments
Please Login to comment...