@ PiCTo уже упомянул принцип DRY.
Я бы предложил другое решение для общей проблемы:
#include <stdlib.h> // EXIT_FAILURE
#include <stdio.h> // scanf(), printf(), puts()
void tell(int value)
{
static char const * const digit[] = {
"zero", "one", "two", "three", "four", "five",
"six", "seven", "eight", "nine", "ten"
};
if (value < 0) { // handle the sign and make value positive
printf("minus ");
value *= -1;
}
if (value / 10)
tell(value / 10);
printf("%s ", digit[value % 10]);
}
int main(void)
{
int value;
if (scanf("%d", &value) != 1) {
fputs("Input error. :(\n\n", stderr);
return EXIT_FAILURE;
}
tell(value);
puts("\n");
}
Процедура:
Ввод: -1234567890
tell(-1234567890) --> "minus "
tell(123456789)
tell(12345678)
tell(1234567)
tell(123456)
tell(12345)
tell(1234)
tell(123)
tell(12)
tell(1) ... recursion ends because 1 / 10 == 0
printf("%s ", digit[1 % 10]) --> "one "
printf("%s ", digit[12 % 10]) --> "two "
printf("%s ", digit[123 % 10]) --> "three "
printf("%s ", digit[1234 % 10]) --> "four "
printf("%s ", digit[12345 % 10]) --> "five "
printf("%s ", digit[123456 % 10]) --> "six "
printf("%s ", digit[1234567 % 10]) --> "seven "
printf("%s ", digit[12345678 % 10]) --> "eight "
printf("%s ", digit[123456789 % 10]) --> "nine "
printf("%s ", digit[1234567890 % 10]) --> "zero "