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.

advertisement
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.

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 Reference 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
Manish Bhojasia, a technology veteran with 20+ years @ Cisco & Wipro, is Founder and CTO at Sanfoundry. He is Linux Kernel Developer & SAN Architect and is passionate about competency developments in these areas. He lives in Bangalore and delivers focused training sessions to IT professionals in Linux Kernel, Linux Debugging, Linux Device Drivers, Linux Networking, Linux Storage, Advanced C Programming, SAN Storage Technologies, SCSI Internals & Storage Protocols such as iSCSI & Fiber Channel. Stay connected with him @ LinkedIn