--- a/fak.c
+++ b/fak.c
@@ -6,14 +6,20 @@
#include <stdio.h>
#include <stdlib.h>
-unsigned long fak (short i)
+unsigned long long fak (short i)
{
if (i == 0)
return 1;
- else if (i > 0)
- return (i * fak (i - 1));
- else
- return (i * fak (i + 1));
+
+ return (i * fak (i - 1));
+}
+
+long double bigfak (short i)
+{
+ if (i == 0)
+ return 1;
+
+ return (i * bigfak (i - 1));
}
int main (int argc, char **argv)
@@ -26,12 +32,15 @@
return EXIT_FAILURE;
}
- if (number < 0) {
- printf ("NUMBER FORMAT ERROR\n");
+ if (number < 0 || number > 170) {
+ printf ("Range Error: %hd ! {0..170}\n", number);
return EXIT_FAILURE;
}
- printf ("The faktorial of %d is %lu\n", number, fak (number));
+ if (number > 20)
+ printf ("The factorial of %2d is %1.5Lg\n", number, bigfak (number));
+ else
+ printf ("The factorial of %2d is %llu\n", number, fak (number));
return EXIT_SUCCESS;
}