From 4acdfcc0cb7e915dc160914cbebb2b154b0796b8 Mon Sep 17 00:00:00 2001 From: Joey Schulze Date: Thu, 1 Nov 2001 18:27:27 +0000 Subject: [PATCH] Added two files that had to be obtained separately in former times --- bigint.c | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ bigint.h | 43 +++++++++++++++++++++ 2 files changed, 154 insertions(+) create mode 100644 bigint.c create mode 100644 bigint.h diff --git a/bigint.c b/bigint.c new file mode 100644 index 0000000..059c71b --- /dev/null +++ b/bigint.c @@ -0,0 +1,111 @@ +/* + bigint.c - Manage big positive integer numbers + Copyright (c) 1996 Martin Schulze + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id$ + */ + +#include "bigint.h" +#include +#include +#include + +bigint bigint_add(bigint a, bigint b) +{ + int i; + unsigned long int tmp; + bigint c; + + for (i=0; i= BIGINT_MAX) { + c.val[i] = tmp - BIGINT_MAX; + if (i BIGINT_PREC) + cp += (strlen(x) - BIGINT_PREC); + strcpy(tmp, cp); + *cp = '\0'; + sscanf(tmp, "%lu", &a.val[i]); + } + } + free (x); + } + + return a; +} + +void bigint_sprintf (char *res, char *format, bigint a) +{ + char s[(BIGINT_PREC*BIGINT_LEN)+1]; + char tmp[BIGINT_PREC+1]; + char form[6]; + int i, max; + + bzero(s, sizeof(s)); + sprintf(form, "%%0%dlu", BIGINT_PREC); + max = BIGINT_LEN; + for (;max>0 && !a.val[max-1];max--); + for (i=0; i + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id$ + */ + +/* + * 4294967295 is max (unsigned long int) + */ + +#define BIGINT_LEN 2 +#define BIGINT_MAX 1000000000 +#define BIGINT_PREC 9 + +typedef struct +{ + unsigned long int val[BIGINT_LEN]; +} bigint; + +bigint bigint_add(bigint a, bigint b); + +bigint bigint_sub(bigint a, bigint b); + +bigint bigint_int(int num); + +bigint bigint_string(char *s); + +void bigint_sprintf (char *res, char *format, bigint a); -- 2.20.1