Open In App

Php Program For Converting Roman Numerals To Decimal Lying Between 1 to 3999

Last Updated : 03 Jan, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

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:  

  1. Split the Roman Numeral string into Roman Symbols (character).
  2. Convert each symbol of Roman Numerals into the value it represents.
  3. Take symbol one by one from starting from index 0: 
    1. If current value of symbol is greater than or equal to the value of next symbol, then add this value to the running total.
    2. 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
// PHP Program to convert Roman
// Numerals to Numbers
  
// This function returns 
// value of a Roman symbol
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;
}
  
// Returns decimal value
// of roman numeral
function romanToDecimal(&$str)
{
    // Initialize result
    $res = 0;
  
    // Traverse given input
    for ($i = 0; $i < strlen($str); $i++)
    {
        // Getting value of
        // symbol s[i]
        $s1 = value($str[$i]);
  
        if ($i+1 < strlen($str))
        {
            // Getting value of
            // symbol s[i+1]
            $s2 = value($str[$i + 1]);
  
            // Comparing both values
            if ($s1 >= $s2)
            {
                // Value of current symbol 
                // is greater or equal to 
                // the next symbol
                $res = $res + $s1;
            }
            else
            {
                $res = $res + $s2 - $s1;
  
                // Value of current symbol is
                // less than the next symbol
                $i++; 
            }
        }
        else
        {
            $res = $res + $s1;
            $i++;
        }
    }
    return $res;
}
  
// Driver Code
  
// Considering inputs
// given are valid
$str ="MCMIV";
echo 
"Integer form of Roman Numeral is ",
 romanToDecimal($str), "";
// This code is contributed by ajit
?>


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!



Similar Reads

Python Program For Converting Roman Numerals To Decimal Lying Between 1 to 3999
Given a Roman 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 fourRecommended: Please solve it on "PRACTICE" first, before moving on
5 min read
Javascript Program For Converting Roman Numerals To Decimal Lying Between 1 to 3999
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 fourRecommended: Please solve it on "PRACTICE" first, before moving on
3 min read
Java Program For Converting Roman Numerals To Decimal Lying Between 1 to 3999
Given a Roman numeral, the task is to find its corresponding decimal value. Example : Input: IXOutput: 9IX is a Roman symbol which represents 9 Input: XLOutput: 40XL is a Roman symbol which represents 40Input: MCMIVOutput: 1904M is a thousand, CM is nine hundred and IV is fourRecommended: Please solve it on "PRACTICE" first, before moving on to the
4 min read
C++ Program For Converting Roman Numerals To Decimal Lying Between 1 to 3999
Given a Roman numeral, the task is to find its corresponding decimal value. Example : Input: IXOutput: 9IX is a Roman symbol which represents 9 Input: XLOutput: 40XL is a Roman symbol which represents 40Input: MCMIVOutput: 1904M is a thousand, CM is nine hundred and IV is fourRecommended: Please solve it on "PRACTICE" first, before moving on to the
4 min read
Converting Decimal Number lying between 1 to 3999 to Roman Numerals
Given a number, find its corresponding Roman numeral. Examples: Input : 9Output : IXInput : 40Output : XLInput : 1904Output : MCMIVFollowing is the list of Roman symbols which include subtractive cases also: SYMBOL VALUEI 1IV 4V 5IX 9X 10XL 40L 50XC 90C 100CD 400D 500CM 900 M 1000 Recommended PracticeConvert to Roman NoTry It!Idea is to convert the
34 min read
Converting Roman Numerals to Integer
Given a string in roman form, the task is to convert this given roman string into an integer. Roman numerals are based on the following symbols: Symbol Value I 1 V 5 X 10 L 50 C 100 D 500 M 1000 Example: Input: IXOutput: 9Explanation: IX is a Roman symbol which represents 9 Input: XLOutput: 40Explanation: XL is a Roman symbol which represents 40 In
10 min read
Javascript Program to Convert Integer to Roman Numerals
Given an Integer number, the task is to convert the Integer to a Roman Number in JavaScript. Roman numerals are a numeral system that originated in ancient Rome and remained the usual way of writing numbers throughout Europe well into the Late Middle Ages. Table of Content Using a Lookup ObjectUsing ArraysUsing a Lookup ObjectOne common approach is
2 min read
JavaScript Program to Convert a String to Roman Numerals
In this article, we will see how to convert a string to Roman numerals using JavaScript. Converting a string to Roman numerals in JavaScript is a common task when working with text data containing numeric values in Roman numeral format. Roman numerals are a numeral system used in ancient Rome, and they are still used in various contexts such as num
3 min read
Sort an array of Roman Numerals in ascending order
Given an array arr[] of N Roman Numerals, the task is to sort these Roman Numerals in ascending order. Examples: Input: arr[] = { "MCMIV", "MIV", "MCM", "MMIV" } Output: MIV MCM MCMIV MMIV Explanation: The roman numerals in their corresponding decimal system are: MIV: 1004 MCM: 1900 MCMIV: 1904 MMIV: 2004 Input: arr = { "MV", "MIV", "MCM", "MM" } O
12 min read
Validating Roman Numerals Using Regular expression
Given a String, and You have to validate whether the given String is Valid Roman Numeral or not. If it is valid print True else False.Note: Numerals are lying between 1 to 3999.Examples: Input: String = IX Output: True Input: String = 54IVC Output: False Recommended: Please solve it on "PRACTICE" first, before moving on to the solution. Roman numer
4 min read