typedef struct bigintNode{
long long number;
struct bigintNode* next;
struct bigintNode* prev;
}BigIntNode;
typedef struct bigIntStruct{
bool isNegative;
BigIntNode* root;
unsigned long long size;
}BigInt;
These two structs keeps BigInts(large numbers). There is no upper or lower limit for numbers (other than your computers memory).
Nodes are store maximum 10 digits (lower than 10^10). After 10 digits, another node added to linked list and extra digits stored there.
-
void addBigInt(BigInt* dest, BigInt* number);
- Sums two BigInts.
-
void subBigInt(BigInt* dest, BigInt* number);
- Subtracts two BigInts.
-
void addbi_internal(BigInt* dest, BigInt* number);
- Sums two BigInts without signs.
-
void subbi_internal(BigInt* dest, BigInt* number);
- Subtracts two BigInts without signs.
-
void tidyBigInt(BigInt* number);
- Cleans unnecessary nodes from BigInt.
-
int compare(BigInt* num1, BigInt* num2);
- Compares two BigInts.
-
int compareAbsVal(BigInt* num1, BigInt* num2);
- Compares two BigInts absolute values.
-
int compareNode(BigIntNode *node1, BigIntNode *node2);
- Compares two BigIntNodes.(Including next nodes).
-
BigInt *copyBigInt(BigInt *number);
- Copies the given BigInt and returns its pointer.
-
BigInt *strtobigInt(char* str);
- Creates a BigInt according to the str and returns its pointer.
-
void printBigInt(BigInt* number);
- Prints the given BigInt.
-
void printbigIntNode(BigIntNode* node);
- Prints the given BigIntNode. (Recuses next nodes)
-
void freeBigInt(BigInt* number);
- Frees the given BigInt.
-
void freeBigIntNode(BigIntNode* node);
- Frees the given BigIntNode. (Recuses next nodes)
-
char digitCount(long long num);
- Returns digit count of the given number.