SHARE
TWEET

Arabic to roman and roman to arabic

a guest May 25th, 2019 69 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include<string.h>
  4.  
  5. void predigit(char num1, char num2);
  6. void postdigit(char c, int n);
  7.  
  8. char romanval[1000];
  9. char roman_Number[1000];
  10. int i = 0;
  11. int main()
  12. {
  13.     int j;
  14.     long number;
  15.     int x;
  16.     printf("Enter 1 to convert an arabic number to roman or enter 2 to convert a roman number to arabic: ");
  17.     scanf("%d", &x);
  18.  
  19.     if (x = 1)
  20.     {
  21.         printf("Enter a number: ");
  22.         scanf("%d", &number);
  23.         if (number <= 0)
  24.         {
  25.             printf("Invalid number");
  26.             return 0;
  27.         }
  28.         while (number != 0)
  29.         {
  30.             if (number >= 1000)
  31.             {
  32.                 postdigit('M', number / 1000);
  33.                 number = number - (number / 1000) * 1000;
  34.             }
  35.             else if (number >= 500)
  36.             {
  37.                 if (number < (500 + 4 * 100))
  38.                 {
  39.                     postdigit('D', number / 500);
  40.                     number = number - (number / 500) * 500;
  41.                 }
  42.                 else
  43.                 {
  44.                     predigit('C', 'M');
  45.                     number = number - (1000 - 100);
  46.                 }
  47.             }
  48.             else if (number >= 100)
  49.             {
  50.                 if (number < (100 + 3 * 100))
  51.                 {
  52.                     postdigit('C', number / 100);
  53.                     number = number - (number / 100) * 100;
  54.                 }
  55.                 else
  56.                 {
  57.                     predigit('L', 'D');
  58.                     number = number - (500 - 100);
  59.                 }
  60.             }
  61.             else if (number >= 50)
  62.             {
  63.                 if (number < (50 + 4 * 10))
  64.                 {
  65.                     postdigit('L', number / 50);
  66.                     number = number - (number / 50) * 50;
  67.                 }
  68.                 else
  69.                 {
  70.                     predigit('X', 'C');
  71.                     number = number - (100 - 10);
  72.                 }
  73.             }
  74.             else if (number >= 10)
  75.             {
  76.                 if (number < (10 + 3 * 10))
  77.                 {
  78.                     postdigit('X', number / 10);
  79.                     number = number - (number / 10) * 10;
  80.                 }
  81.                 else
  82.                 {
  83.                     predigit('X', 'L');
  84.                     number = number - (50 - 10);
  85.                 }
  86.             }
  87.             else if (number >= 5)
  88.             {
  89.                 if (number < (5 + 4 * 1))
  90.                 {
  91.                     postdigit('V', number / 5);
  92.                     number = number - (number / 5) * 5;
  93.                 }
  94.                 else
  95.                 {
  96.                     predigit('I', 'X');
  97.                     number = number - (10 - 1);
  98.                 }
  99.             }
  100.             else if (number >= 1)
  101.             {
  102.                 if (number < 4)
  103.                 {
  104.                     postdigit('I', number / 1);
  105.                     number = number - (number / 1) * 1;
  106.                 }
  107.                 else
  108.                 {
  109.                     predigit('I', 'V');
  110.                     number = number - (5 - 1);
  111.                 }
  112.             }
  113.         }
  114.     }
  115.     printf("Roman number is: ");
  116.     for (j = 0; j < i; j++)
  117.         printf("%c", romanval[j]);
  118.     return 0;
  119. }
  120.  
  121.  
  122.     void predigit(char num1, char num2)
  123.     {
  124.         romanval[i++] = num1;
  125.         romanval[i++] = num2;
  126.     }
  127.  
  128.     void postdigit(char c, int n)
  129.     {
  130.         int j;
  131.         for (j = 0; j < n; j++)
  132.             romanval[i++] = c;
  133.     }
  134.  
  135. if (x = 2)
  136. {
  137.     long int number = 0;
  138.     printf("Enter a roman number (Valid digits are I, V, X, L, C, D, M):  \n");
  139.     scanf("%s", roman_Number);
  140.  
  141.     while (roman_Number[i])
  142.     {
  143.         if (digit(roman_Number[i]) < 0)
  144.         {
  145.             printf("Invalid roman digit : %c", roman_Number[i]);
  146.             return 0;
  147.         }
  148.  
  149.         if ((strlen(roman_Number) - i) > 2)
  150.         {  
  151.             if (digit(roman_Number[i]) < digit(roman_Number[i + 2])) {
  152.                 printf("Invalid roman number");
  153.                 return 0;
  154.             }
  155.         }
  156.  
  157.         if (digit(roman_Number[i]) >= digit(roman_Number[i + 1]))
  158.             number = number + digit(roman_Number[i]);
  159.         else {
  160.             number = number + (digit(roman_Number[i + 1]) - digit(roman_Number[i]));
  161.             i++;
  162.         }
  163.         i++;
  164.     }
  165.  
  166.     printf("Its decimal value is : %ld", number);
  167.  
  168.     return 0;
  169.  
  170.  
  171.  
  172. int digit(char c) {
  173.  
  174.     int value = 0;
  175.  
  176.     switch (c) {
  177.     case 'I': value = 1; break;
  178.     case 'V': value = 5; break;
  179.     case 'X': value = 10; break;
  180.     case 'L': value = 50; break;
  181.     case 'C': value = 100; break;
  182.     case 'D': value = 500; break;
  183.     case 'M': value = 1000; break;
  184.     case '\0': value = 0; break;
  185.     default: value = -1;
  186.     }
  187.  
  188.     return value;
  189. }
  190. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top