unsigned long romanToNumber(const char* roman) {
unsigned long result = 0;
int prevValue = 0;
for (int i = strlen(roman) - 1; i >= 0; --i) {
int value = 0;
switch (roman[i]) {
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;
}
if (value < prevValue) result -= value;
else result += value;
prevValue = value;
}
return result;
}
void printRomanNumeral(unsigned long num) {
const unsigned long values[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
const char* numerals[] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
for (int i = 0; num > 0; ++i) {
while (num >= values[i]) {
Serial.print(numerals[i]);
num -= values[i];
}
}
}
void setup() {
Serial.begin(115200);
const char* romanNumeral = "MMMMDLXVII";
unsigned long convertedNumber = romanToNumber(romanNumeral);
Serial.print(romanNumeral); Serial.print(" ==> "); Serial.println(convertedNumber);
Serial.print(convertedNumber); Serial.print(" ==> "); printRomanNumeral(convertedNumber);
}
void loop() {}