Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include<string.h>
- void predigit(char num1, char num2);
- void postdigit(char c, int n);
- char romanval[1000];
- char roman_Number[1000];
- int i = 0;
- int main()
- {
- int j;
- long number;
- int x;
- printf("Enter 1 to convert an arabic number to roman or enter 2 to convert a roman number to arabic: ");
- scanf("%d", &x);
- if (x = 1)
- {
- printf("Enter a number: ");
- scanf("%d", &number);
- if (number <= 0)
- {
- printf("Invalid number");
- return 0;
- }
- while (number != 0)
- {
- if (number >= 1000)
- {
- postdigit('M', number / 1000);
- number = number - (number / 1000) * 1000;
- }
- else if (number >= 500)
- {
- if (number < (500 + 4 * 100))
- {
- postdigit('D', number / 500);
- number = number - (number / 500) * 500;
- }
- else
- {
- predigit('C', 'M');
- number = number - (1000 - 100);
- }
- }
- else if (number >= 100)
- {
- if (number < (100 + 3 * 100))
- {
- postdigit('C', number / 100);
- number = number - (number / 100) * 100;
- }
- else
- {
- predigit('L', 'D');
- number = number - (500 - 100);
- }
- }
- else if (number >= 50)
- {
- if (number < (50 + 4 * 10))
- {
- postdigit('L', number / 50);
- number = number - (number / 50) * 50;
- }
- else
- {
- predigit('X', 'C');
- number = number - (100 - 10);
- }
- }
- else if (number >= 10)
- {
- if (number < (10 + 3 * 10))
- {
- postdigit('X', number / 10);
- number = number - (number / 10) * 10;
- }
- else
- {
- predigit('X', 'L');
- number = number - (50 - 10);
- }
- }
- else if (number >= 5)
- {
- if (number < (5 + 4 * 1))
- {
- postdigit('V', number / 5);
- number = number - (number / 5) * 5;
- }
- else
- {
- predigit('I', 'X');
- number = number - (10 - 1);
- }
- }
- else if (number >= 1)
- {
- if (number < 4)
- {
- postdigit('I', number / 1);
- number = number - (number / 1) * 1;
- }
- else
- {
- predigit('I', 'V');
- number = number - (5 - 1);
- }
- }
- }
- }
- printf("Roman number is: ");
- for (j = 0; j < i; j++)
- printf("%c", romanval[j]);
- return 0;
- }
- void predigit(char num1, char num2)
- {
- romanval[i++] = num1;
- romanval[i++] = num2;
- }
- void postdigit(char c, int n)
- {
- int j;
- for (j = 0; j < n; j++)
- romanval[i++] = c;
- }
- if (x = 2)
- {
- long int number = 0;
- printf("Enter a roman number (Valid digits are I, V, X, L, C, D, M): \n");
- scanf("%s", roman_Number);
- while (roman_Number[i])
- {
- if (digit(roman_Number[i]) < 0)
- {
- printf("Invalid roman digit : %c", roman_Number[i]);
- return 0;
- }
- if ((strlen(roman_Number) - i) > 2)
- {
- if (digit(roman_Number[i]) < digit(roman_Number[i + 2])) {
- printf("Invalid roman number");
- return 0;
- }
- }
- if (digit(roman_Number[i]) >= digit(roman_Number[i + 1]))
- number = number + digit(roman_Number[i]);
- else {
- number = number + (digit(roman_Number[i + 1]) - digit(roman_Number[i]));
- i++;
- }
- i++;
- }
- printf("Its decimal value is : %ld", number);
- return 0;
- int digit(char c) {
- int value = 0;
- switch (c) {
- case 'I': value = 1; break;
- case 'V': value = 5; break;
- case 'X': value = 10; break;
- case 'L': value = 50; break;
- case 'C': value = 100; break;
- case 'D': value = 500; break;
- case 'M': value = 1000; break;
- case '\0': value = 0; break;
- default: value = -1;
- }
- return value;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement