From d62443adaba86f94866e5d3f4eaf4e113a13e6fc Mon Sep 17 00:00:00 2001 From: justanothercatgirl Date: Fri, 6 Dec 2024 16:24:22 +0300 Subject: added 7.1 --- 7_1/Makefile | 29 +++++++++++++++++++++++++++++ 7_1/main.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ README.md | 2 +- 3 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 7_1/Makefile create mode 100644 7_1/main.c diff --git a/7_1/Makefile b/7_1/Makefile new file mode 100644 index 0000000..80b3f39 --- /dev/null +++ b/7_1/Makefile @@ -0,0 +1,29 @@ + +all: test + +.PHONY: test clean + +test: task7_1 + ./$< 69 + ./$< 429 + ./$< 828 + ./$< 425729 + ./$< 235723572579 + ./$< 000111222333 + ./$< 1048575 + ./$< 1048576 + ./$< -31273891273891273 + ./$< -000000000000000000 + ./$< -2313423 + ./$< -123 + - ./$< -9223372036854775809 + ./$< -9223372036854775807 + - ./$< -9223372036854775808 + ./$< -1048576 + ./$< -1048575 + + +task7_1: main.c + cc -o task7_1 main.c + + diff --git a/7_1/main.c b/7_1/main.c new file mode 100644 index 0000000..ef4536b --- /dev/null +++ b/7_1/main.c @@ -0,0 +1,46 @@ +#include +#include + +/* бля какой же код охуенный */ +/* ломается, если x = 0x8000000000000000 */ +char* tobin(long int x) { + size_t i = 0, j = 0; + char buffer[64]; + char *ret; + char sgn = x < 0; + + x *= ((x > 0) << 1) - 1; + printf("%li\n", x); + for (; x; x >>= 1) buffer[i++] = '0' + (x & 1); + ret = calloc(i + 1 + sgn, sizeof *ret); + ret[0] = '-'; + j += sgn; + while (i) ret[j++] = buffer[--i]; + + return ret; +} + +int main(int argc, char* argv[]) { + long number; + char *bin; + + if (argc != 2) { + fprintf(stderr, "\x1b[91mError: Invalid amount of arguments\x1b[0m\n" + "Usage: \x1b[92m%s \n\x1b[0m", argv[0]); + return 1; + } + + number = atol(argv[1]); + if (number == 0) { + puts("Binary for 0: 0"); + return 0; + } + if (number == 0x8000000000000000) { + puts("Aha, I see what you did there)"); + return 1; + } + bin = tobin(number); + printf("Binary for %li: %s\n", number, bin); + free(bin); + return 0; +} diff --git a/README.md b/README.md index 4f29fd3..a924176 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Задания 7.1 и 7.2 ## 7.1: -пока не сделал +`make test` протестирует программу с кучей кейсов ## 7.2: ### Запуск -- cgit v1.2.3-70-g09d2