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;
}
Exemple #3
0
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;
}