#include #include unsigned int convertInt(char *s, unsigned int *r) { long int bigValue ; unsigned int retValue ; char *test ; bigValue = strtol(s, &test, 10) ; retValue = bigValue ; if (*s == '\0' || *test != '\0' || retValue != bigValue) { return 0 ; } else { *r = retValue ; return 1 ; } } int main(int argc, char *argv[]) { unsigned int m, n ; if (argc==3) { int badArg = 0 ; if (! convertInt(argv[1], &m)) { printf("Invalid argument: %s\n", argv[1]) ; badArg = 1 ; } if (! convertInt(argv[2], &n)) { printf("Invalid argument: %s\n", argv[2]) ; badArg = 1 ; } if (badArg) { return EXIT_FAILURE ; } else if (m > n) { printf("First argument (%u) should be smaller than second (%u)\n", m, n) ; return EXIT_FAILURE ; } else { printf("%u! is %lu\n", m, factorial(m)) ; printf("comb(%u, %u) is %lu\n", m, n, combinations(m, n)) ; printf("perm(%u, %u) is %lu\n", m, n, permutations(m, n)) ; return EXIT_SUCCESS ; } } else { printf("Wrong number of arguments\n") ; return EXIT_FAILURE ; } }