aboutsummaryrefslogtreecommitdiff
path: root/analyzer/utils
diff options
context:
space:
mode:
Diffstat (limited to 'analyzer/utils')
-rw-r--r--analyzer/utils/roman.c16
-rw-r--r--analyzer/utils/roman.h12
2 files changed, 28 insertions, 0 deletions
diff --git a/analyzer/utils/roman.c b/analyzer/utils/roman.c
new file mode 100644
index 0000000..9ea2bbb
--- /dev/null
+++ b/analyzer/utils/roman.c
@@ -0,0 +1,16 @@
+#include "utils/roman.h"
+
+#include <stddef.h>
+#include <string.h>
+
+void to_roman(char *buffer, int number) {
+ buffer[0] = '\0';
+ int nums[ROMAN_CHAR_COUNT] = ROMAN_NUMS;
+ char *chars[ROMAN_CHAR_COUNT] = ROMAN_CHARS;
+ for (size_t i = 0; i < ROMAN_CHAR_COUNT; i++) {
+ for (size_t j = 0; j < number / nums[i]; j++) {
+ strcat(buffer, chars[i]);
+ }
+ number %= nums[i];
+ }
+}
diff --git a/analyzer/utils/roman.h b/analyzer/utils/roman.h
new file mode 100644
index 0000000..b4f5d3f
--- /dev/null
+++ b/analyzer/utils/roman.h
@@ -0,0 +1,12 @@
+// utils/roman.h
+// functions for roman numbers
+
+#define ROMAN_CHAR_COUNT 13
+#define ROMAN_NUMS {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}
+#define ROMAN_CHARS {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}
+
+// convert a arabic number to roman number
+// params:
+// buffer - buffer to save the roman number to
+// number - arabic number to convert
+extern void to_roman(char *buffer, int number);