|
Модераторы: bsa |
|
kumiho |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 12.1.2023 Репутация: нет Всего: нет |
Нужна помощь с программой на языке программирования си. С частью задания я справился, но так получилось, что нужна помощь со 2 частью. Умоляю, помогите.
задание: Разработать собственный тип данных (структуру) “bigint” для выполнения операций с целыми числами содержащими произвольное количество знаков. Структура должна соответствовать следующему интерфейсу: structure bigint { char *data; size_t size; int neg; } Реализовать функции, позволяющие инициализировать переменные типа bigint: bigint createBigintFromUnsInt(unsigned long int*); bigint createBigintFromInt(long int*); bigint createBigintFromBI(bigint*); bigint createBigintFromChar(char*); bigint createBigint(); Реализовать операции с bigint: bigint add(const bigint* left, const bigint* right); -сложение bigint sub(const bigint* left, const bigint* right); -вычитание bigint mul(const bigint* left, const bigint* right); -умножение bigint div(const bigint* left, const bigint* right); -целочисленное деление bigint div(const bigint* left, const bigint* right, bigint* res); -деление с остатком Реализовать функцию вывода: void printBigint(const bigint*); Вот такую программу написал: #include <stdio.h> #include <stdlib.h> #include <string.h> structure bigint { char *data; size_t size; int neg; } bigint; bigint createBigintFromUnsInt(unsigned long int *n) { bigint b = {0}; b.neg = 0; b.size = 0; b.data = malloc(sizeof(char)); if (*n == 0) { b.size = 1; b.data[0] = 0; return b; } while (*n > 0) { b.data = realloc(b.data, ++b.size*sizeof(char)); b.data[b.size - 1] = *n%10; *n / =10; } return b; } bigint createBigintFromInt(long int *n) { bigint b = {0}; if (*n < 0) { b = createBigintFromUnsInt((unsigned long int*)n); b.neg = 1; } else { b = createBigintFromUnsInt((unsigned long int*)n); } return b; } bigint createBigintFromBI(bigint *bi) { bigint b = {0}; b.neg = bi->neg; b.size = bi->size; b.data = malloc(b.size * sizeof(char)); memcpy(b.data, bi->data, b.size * sizeof(char)) return b; } bigint createBigintFromChar(char *str) { bigint b = {0}; if (str[0]=='-') { b.neg = 1; str++; } else { b.neg = 0 } b.size = strlen(str); b.data = malloc(b.size * sizeof(char)); for (size_t i =0; i < b.size; i++) { b.data[i] = str[b.size - 1 - i] - '0'; } return b; } bigint createBigint() { bigint b = {0}; b.neg = 0; b.size = 1; b.data = malloc(sizeof(char)); b.data[0] = 0; return b; } |
|||
|
||||
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |