/* Solution to Roman Numerals */ #include #include char *tens[] = {"", "x", "xx", "xxx", "xl", "l", "lx", "lxx", "lxxx", "xc"}; char *ones[] = {"", "i", "ii", "iii", "iv", "v", "vi", "vii", "viii", "ix"}; char *rome = "ivxlc"; void add(int n, int prev[5], int this[5]) { int i, j; char roman[100]; for (i = 0; i < 5; i++) { this[i] = prev[i]; } if (n == 0) return; if (n == 100) { this[4]++; return; } strcpy(roman, ones[n % 10]); j = (n - (n % 10))/10; strcat(roman, tens[j]); for (i = 0; i < strlen(roman); i++) { for (j = 0; j < 5; j++) { if (roman[i] == rome[j]) { this[j]++; break; } } } } main() { int i, v, x, l, c; int j, k, n; int all[101][5]; i = v = x = l = c = 0; for (j = 0; j < 101; j++) { for (k = 0; k < 5; k++) { all[j][k] = 0; } if (j == 0) continue; add(j, all[j-1], all[j]); } scanf("%d", &n); while (n != 0) { printf("%d: %d i", n, all[n][0]); for (j = 1; j < 5; j++) { printf(", %d %c", all[n][j], rome[j]); } printf("\n"); scanf("%d", &n); } }