int add(char *sum, const char *augend, const char *addend) { if (sum == NULL || augend == NULL || addend == NULL) { return ROMCALC_NULL_POINTER_ERROR; } if (!is_roman_numeral(augend) || !is_roman_numeral(addend)) { return ROMCALC_INVALID_OPERAND_ERROR; } int result = roman_to_arabic(augend) + roman_to_arabic(addend); if (!is_in_range(result)) { return ROMCALC_INVALID_RESULT_ERROR; } arabic_to_roman(sum, result); return ROMCALC_SUCCESS; }
int subtract(char *difference, const char *minuend, const char *subtrahend) { if (difference == NULL || minuend == NULL || subtrahend == NULL) { return ROMCALC_NULL_POINTER_ERROR; } if (!is_roman_numeral(minuend) || !is_roman_numeral(subtrahend)) { return ROMCALC_INVALID_OPERAND_ERROR; } int result = roman_to_arabic(minuend) - roman_to_arabic(subtrahend); if (!is_in_range(result)) { return ROMCALC_INVALID_RESULT_ERROR; } arabic_to_roman(difference, result); return ROMCALC_SUCCESS; }
int main(void) { int cnt = 0; const char *ptr = roman; while (*ptr) { char str[64]; const char *tmp = ptr; arabic_to_roman(roman_to_arabic(&ptr), str); cnt += (ptr - tmp) - strlen(str); ptr++; } printf("%d\n", cnt); return 0; }