C Program to Convert Roman Number to Decimal Number

«
»

This is a C Program to Convert Roman Number to Decimal Number.

Problem Description

This program takes a roman number as input and converts it to decimal number.

Problem Solution

1. Take a roman number as input.
2. Using switch statement define the value of each roman digit.
3. Through switch statement access each digit of a roman number and compute the value.
4. Print the value and exit.

Program/Source Code

Here is source code of the C program to Convert Roman Number to Decimal Number. The C program is successfully compiled and run on a Linux system. The program output is also shown below.

  1. /*
  2. /*
  3.  * C Program to Convert Roman Number to Decimal Number
  4.  */
  5.  
  6. #include<stdio.h>
  7. #include<string.h>
  8.  
  9. int digit(char);
  10.  
  11. int main(){
  12.  
  13.     char roman_Number[1000];
  14.     int i=0;
  15.     long int number =0;
  16.  
  17.     printf("Enter any roman number (Valid digits are I, V, X, L, C, D, M):  \n");
  18.     scanf("%s",roman_Number);
  19.  
  20.     while(roman_Number[i]){
  21.  
  22.          if(digit(roman_Number[i]) < 0){
  23.              printf("Invalid roman digit : %c",roman_Number[i]);
  24.              return 0;
  25.          }
  26.  
  27.          if((strlen(roman_Number) -i) > 2){
  28.              if(digit(roman_Number[i]) < digit(roman_Number[i+2])){
  29.                  printf("Invalid roman number");
  30.                  return 0;
  31.              }
  32.          }
  33.  
  34.          if(digit(roman_Number[i]) >= digit(roman_Number[i+1]))
  35.              number = number + digit(roman_Number[i]);
  36.          else{
  37.              number = number + (digit(roman_Number[i+1]) - digit(roman_Number[i]));
  38.              i++;
  39.          }
  40.          i++;
  41.     }
  42.  
  43.     printf("Its decimal value is : %ld",number);
  44.  
  45.     return 0;
  46.  
  47. }
  48.  
  49. int digit(char c){
  50.  
  51.     int value=0;
  52.  
  53.     switch(c){
  54.          case 'I': value = 1; break;
  55.          case 'V': value = 5; break;
  56.          case 'X': value = 10; break;
  57.          case 'L': value = 50; break;
  58.          case 'C': value = 100; break;
  59.          case 'D': value = 500; break;
  60.          case 'M': value = 1000; break;
  61.          case '\0': value = 0; break;
  62.          default: value = -1; 
  63.     }
  64.  
  65.     return value;
  66. }
Program Explanation

1. Take a roman number as input and store it in the array roman_Number.
2. In the function digit(), define the value of each digit of the roman number inside the switch statement and return the same.
3. Using while statement access each digit of the input number.
4. Firstly check if the current roman digit’s value is less than zero. If it is, then print the output as “Invalid roman digit”.
5. If not, then check if the value of current roman digit is greater or equal to its next digit’s value. If it is, then increment the variable number with the value of current roman digit.
6. Otherwise, subtract the value of current roman digit from the value of its next roman digit and increment the variable number with the obtained value.
7. Print the variable number as output.

Sanfoundry Certification Contest of the Month is Live. 100+ Subjects. Participate Now!
advertisement
advertisement
Runtime Test Cases
Output:
Enter any roman number (Valid digits are I, V, X, L, C, D, M):
XVII
Its decimal value is: 17

Sanfoundry Global Education & Learning Series – 1000 C Programs.

Here’s the list of Best Books in C Programming, Data-Structures and Algorithms

If you wish to look at other example programs on Simple C Programs, go to Simple C Programs. If you wish to look at programming examples on all topics, go to C Programming Examples.

advertisement
advertisement
Subscribe to our Newsletters (Subject-wise). Participate in the Sanfoundry Certification contest to get free Certificate of Merit. Join our social networks below and stay updated with latest contests, videos, internships and jobs!

Youtube | Telegram | LinkedIn | Instagram | Facebook | Twitter | Pinterest
Manish Bhojasia - Founder & CTO at Sanfoundry
Manish Bhojasia, a technology veteran with 20+ years @ Cisco & Wipro, is Founder and CTO at Sanfoundry. He lives in Bangalore, and focuses on development of Linux Kernel, SAN Technologies, Advanced C, Data Structures & Alogrithms. Stay connected with him at LinkedIn.

Subscribe to his free Masterclasses at Youtube & technical discussions at Telegram SanfoundryClasses.