anubhav_c

Decimal to Roman converter

Jan 28th, 2013
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.34 KB | None | 0 0
  1. /*  Overly complex (but correct) program written by me.
  2.     Compare http://pastebin.com/HnceuR19
  3. */
  4.  
  5. #include <stdio.h>
  6. #include <ctype.h>
  7.  
  8. int single_char(char roman)
  9. {
  10.     roman = tolower(roman);
  11.     switch(roman)
  12.     {
  13.         case 'i': return 1;
  14.         case 'v': return 5;
  15.         case 'x': return 10;
  16.         case 'l': return 50;
  17.         case 'c': return 100;
  18.         case 'd': return 500;
  19.         case 'm': return 1000;
  20.         default:  return 0;
  21.     }
  22. }
  23.  
  24. int roman_to_decimal(char *roman)
  25. {
  26.     int i, prev_val = 0, cur_val, committed_all = 0, result = 0;
  27.     char cur;
  28.    
  29.     for(i = 0; roman[i] != '\0'; i++)
  30.     {
  31.         cur_val = single_char(roman[i]);
  32.         if (cur_val > prev_val && i != 0)
  33.         {
  34.             result += cur_val - prev_val;
  35.             committed_all = 1;
  36.         }
  37.         else
  38.         {
  39.             if (!committed_all)
  40.                 result += prev_val;
  41.             committed_all = 0; // current value uncommitted
  42.         }
  43.        
  44.         prev_val = cur_val;
  45.     }
  46.    
  47.     if (!committed_all)
  48.         result += cur_val;
  49.    
  50.     return result;
  51. }
  52.  
  53. int main()
  54. {
  55.     char roman[20];
  56.     int result;
  57.     printf("Enter Roman number: ");
  58.     scanf("%s", roman);
  59.     result = roman_to_decimal(roman);
  60.     printf("Decimal equivalent: %d\n", result);
  61.     printf("\n");
  62. }
Advertisement
Add Comment
Please, Sign In to add comment