diff options
Diffstat (limited to 'main.c')
| -rw-r--r-- | main.c | 25 |
1 files changed, 13 insertions, 12 deletions
@@ -1,25 +1,26 @@ #include <stdio.h> #include <stdlib.h> -void PrintHelp(void) { +int print_help(void) { printf("Usage: collatz <number>" "\nMade by samuel@yakubos.org\n\n"); + return 1; } int main(int argc, char *argv[]) { - if ( argc < 2 || argc > 2) { - PrintHelp(); - return 1; - } + if ( argc < 2 || argc > 2) return print_help(); + char *endptr; - long int num; - int steps = 0; - num = strtol(argv[1], &endptr, 10); + int int_number = strtol(argv[1], &endptr, 10); - printf("%li\n", num); - while ( num > 1 ) { - num = ( num & 1 ) ? num * 3 + 1 : num / 2; - printf("%li\n", num); + /* check the number for nonsense */ + if ( int_number <= 0 ) return print_help(); + unsigned long long long_num = int_number; + + int steps = 0; + while ( long_num > 1 ) { + long_num = ( long_num & 1 ) ? long_num * 3 + 1 : long_num / 2; + printf("%llu\n", long_num); steps++; } |