diff options
| author | Mr. Sam <samuel@yakubos.org> | 2026-07-26 04:32:31 +0100 |
|---|---|---|
| committer | Mr. Sam <samuel@yakubos.org> | 2026-07-26 04:32:31 +0100 |
| commit | c5757982eee8212810dcabb80db43ed4a733147a (patch) | |
| tree | 899881a88a6fe25cb708b5e3e1002d0e959b6171 | |
| parent | 17117131031f902165d43ed231f5a4d500cf3a66 (diff) | |
fix nonsense input, also use cc and -O3
| -rwxr-xr-x | Makefile | 4 | ||||
| -rw-r--r-- | main.c | 25 |
2 files changed, 15 insertions, 14 deletions
@@ -2,9 +2,9 @@ PREFIX = /usr/local -CFLAGS = -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os +CFLAGS = -std=c99 -pedantic -Wall -Wno-deprecated-declarations -O3 -CC = gcc +CC = cc SRC = main.c @@ -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++; } |