Advertisement
Guest User

Arabic to roman and roman to arabic

a guest
May 25th, 2019
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.52 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement