Нужна помощь!
Разработать собственный тип данных (структуру) “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*);
Xасть программы написала, пожалуйста, помогите со 2 частью:
1.c.zip (542 байта)
Вот код, который у меня получилось написать:
#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;
}