Skip to content

Commit

Permalink
working sub
Browse files Browse the repository at this point in the history
  • Loading branch information
Do Nhat Minh committed Feb 16, 2012
1 parent cc36d1b commit 5aa1752
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 2 deletions.
35 changes: 34 additions & 1 deletion bigint.c
Expand Up @@ -119,7 +119,40 @@ bigint *bi_sub(bigint *a, bigint *b) {
int sa = a->size,
sb = b->size;
int *na = a->n,
*nb = a->n;
*nb = b->n;
bigint *retval = bi_create((sa < sb) ? sb : sa);
if (retval == NULL)
return NULL;
int *n = retval->n;
int biggersize = retval->size;
int *bigger = ((sa > sb) > 0) ? na : nb;
int tmp = 0,
carry = 0;
int i;
for (i = 0; i < sa && i < sb; i++) {
if (na[i] < nb[i] + carry) {
n[i] = MAXD + na[i] - nb[i] - carry;
carry = 1;
}
else {
n[i] = na[i] - nb[i] - carry;
carry = 0;
}
/* printf("na[%d]=%d\n", i, na[i]);
printf("nb[%d]=%d\n", i, nb[i]);
printf("n[%d]=%d\n", i, n[i]);*/
}
while (carry != 0 && i < biggersize) {
if (bigger[i] < carry)
n[i] = MAXD - 1;
else {
n[i] = bigger[i] - carry;
carry = 0;
}
// printf("n[%d]=%d\n", i, n[i]);
i++;
}
return retval;
}

bigint *bi_mult(bigint *a, bigint *b) {
Expand Down
16 changes: 15 additions & 1 deletion driver.c
Expand Up @@ -84,7 +84,7 @@ int main(int argc, char *argv[]) {

// test 8
a = bi_createfromint(MAXD);
b = bi_createfromint(MAXD);
b = bi_createfromint(MAXD + 5);
bi_print(a);
printf(" + ");
bi_print(b);
Expand All @@ -96,5 +96,19 @@ int main(int argc, char *argv[]) {
bi_delete(b);
bi_delete(c);

// test 8
a = bi_createfromint(MAXD);
b = bi_createfromint(5);
bi_print(a);
printf(" - ");
bi_print(b);
printf(" is ");
c = bi_sub(a, b);
bi_print(c);
printf("\n");
bi_delete(a);
bi_delete(b);
bi_delete(c);

return 0;
}

0 comments on commit 5aa1752

Please sign in to comment.