Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Overly complex (but correct) program written by me.
- Compare http://pastebin.com/HnceuR19
- */
- #include <stdio.h>
- #include <ctype.h>
- int single_char(char roman)
- {
- roman = tolower(roman);
- switch(roman)
- {
- case 'i': return 1;
- case 'v': return 5;
- case 'x': return 10;
- case 'l': return 50;
- case 'c': return 100;
- case 'd': return 500;
- case 'm': return 1000;
- default: return 0;
- }
- }
- int roman_to_decimal(char *roman)
- {
- int i, prev_val = 0, cur_val, committed_all = 0, result = 0;
- char cur;
- for(i = 0; roman[i] != '\0'; i++)
- {
- cur_val = single_char(roman[i]);
- if (cur_val > prev_val && i != 0)
- {
- result += cur_val - prev_val;
- committed_all = 1;
- }
- else
- {
- if (!committed_all)
- result += prev_val;
- committed_all = 0; // current value uncommitted
- }
- prev_val = cur_val;
- }
- if (!committed_all)
- result += cur_val;
- return result;
- }
- int main()
- {
- char roman[20];
- int result;
- printf("Enter Roman number: ");
- scanf("%s", roman);
- result = roman_to_decimal(roman);
- printf("Decimal equivalent: %d\n", result);
- printf("\n");
- }
Advertisement
Add Comment
Please, Sign In to add comment