Example #1
0
NUMBER number_subtract(NUMBER num1, NUMBER num2) {
	int borrow, sub, i, j, flip;
	NUMBER tmp, res = number_new();

	if (num2.negative) {
		num2.negative = 0;
		return number_add(num1, num2);
	}

	if (num1.negative) {
		num1.negative = 0;
		res = number_add(num2, num1);
		res.negative = 1;
		return res;
	}

	flip = !number_greater(num1, num2);
	if (flip) {
		tmp = num1;
		num1 = num2;
		num2 = tmp;
	}

	for (i = sub = borrow = 0; i < num1.numbers || i < num2.numbers || borrow; i++, sub = 0) {
		if (num2.numbers > i)
			sub = num2.number[i];
		sub += borrow;
		if (num1.numbers > i) {
			num1.number[i] -= sub;
			for (j = 0; num1.number[i] < 0; j++, num1.number[i] += 10);
			number_insert_high(&res, num1.number[i]);
			borrow = j;
		} else {
			number_insert_high(&res, sub % 10);
			borrow = sub / 10;
		}
	}
	
	if (flip)
		res.negative = 1;

	return res;
}
Example #2
0
int main(int argc, char **argv) {
	NUMBER num1, num2, num3;
	char arg1[512], arg2[512];

	fprintf(stderr, "Enter two numbers to add: ");
	fscanf(stdin, "%s %s", arg1, arg2);
	num1 = number_from_string(arg1);
	num2 = number_from_string(arg2);
	num3 = number_add(num1, num2);
	fprintf(stderr, "(%s) + (%s) = %s\n", arg1, arg2, number_to_string(&num3));
	fprintf(stderr, "Enter two numbers to subtract: ");
	fscanf(stdin, "%s %s", arg1, arg2);
	num1 = number_from_string(arg1);
	num2 = number_from_string(arg2);
	num3 = number_subtract(num1, num2);
	fprintf(stderr, "(%s) - (%s) = %s\n", arg1, arg2, number_to_string(&num3));

	return 0;
}
Example #3
0
VALUE wrap_add(self, a, b){
  return INT2FIX( number_add( FIX2INT(a), FIX2INT(b) ) );
}