示例#1
0
文件: bignum.c 项目: walrus7521/code
void divide_bignum(bignum *a, bignum *b, bignum *c)
{
    bignum row, tmp;
    int asign, bsign, i, j;
    initialize_bignum(c);
    c->signbit = a->signbit * b->signbit;
    asign = a->signbit;
    bsign = b->signbit;
    a->signbit = PLUS;
    b->signbit = PLUS;
    initialize_bignum(&row);
    initialize_bignum(&tmp);
    c->lastdigit = a->lastdigit;
    for (i = a->lastdigit; i >= 0; i--) {
        digit_shift(&row, 1);
        row.digits[0] = a->digits[i];
        c->digits[i] = 0;
        while (compare_bignum(&row, b) != PLUS) {
            c->digits[i]++;
            subtract_bignum(&row, b, &tmp);
            row = tmp;
        }
    }
    zero_justify(c);
    a->signbit = asign;
    b->signbit = bsign;
}
示例#2
0
文件: bignum.c 项目: walrus7521/code
void multiply_bignum(bignum *a, bignum *b, bignum *c)
{
    bignum row, tmp;
    int i, j;
    initialize_bignum(c);
    row = *a;
    for (i = 0; i <= b->lastdigit; i++) {
        for (j = 1; j <= b->digits[i]; j++) {
            add_bignum(c, &row, &tmp);
            *c = tmp;
        }
        digit_shift(&row, 1);
    }
    c->signbit = a->signbit * b->signbit;
    zero_justify(c);
}
示例#3
0
文件: number_old.c 项目: hss440/algo1
number_t mult_num(number_t a, number_t b)
{
    number_t r, tmp;
    int i, j, t;

    r = zero();

    t = b.digit_len - b.int_len;

    for (i = b.digit_len - 1, j = 0; i >= 0; i--, j++) {
        tmp = mult_one(b.digit[i], a);
        tmp = digit_shift(j, tmp);

        r = add_number(r, tmp);
    }
    r.int_len -= t;
    r.sign = a.sign * b.sign;

    return remove_zeros(r);
}
示例#4
0
文件: bignum.c 项目: armenr/algorist
void multiply_bignum(bignum *a, bignum *b, bignum *c) {
	bignum row;			/* represent shifted row */
	bignum tmp;			/* placeholder bignum */
	int i,j;			/* counters */

	initialize_bignum(c);

	row = *a;

	for(i = 0; i <= b->lastdigit; i++) {
		for(j = 1; j <= b->digits[i]; j++) {
			add_bignum(c,&row,&tmp);
			*c = tmp;
		}
		digit_shift(&row,1);
	}

	c->signbit = a->signbit * b->signbit;

	zero_justify(c);
}
示例#5
0
文件: bignum.c 项目: armenr/algorist
void divide_bignum(bignum *a, bignum *b, bignum *c) {
  bignum row;                     /* represent shifted row */
  bignum tmp;                     /* placeholder bignum */
  int asign, bsign;		/* temporary signs */
  int i;                        /* counters */

  initialize_bignum(c);

  c->signbit = a->signbit * b->signbit;

  asign = a->signbit;
  bsign = b->signbit;

  a->signbit = PLUS;
  b->signbit = PLUS;

  initialize_bignum(&row);
  initialize_bignum(&tmp);

  c->lastdigit = a->lastdigit;

  for(i = a->lastdigit; i >= 0; i--) {
    digit_shift(&row,1);
    row.digits[0] = a->digits[i];

    c->digits[i] = 0;

    while(compare_bignum(&row,b) != PLUS) {
      c->digits[i] ++;
      subtract_bignum(&row,b,&tmp);
      row = tmp;
    }
    
  }

  zero_justify(c);

  a->signbit = asign;
  b->signbit = bsign;
}