コード例 #1
0
ファイル: BigInt.cpp プロジェクト: Barbandy/Lab_Tchmk_3
BigInt BigInt::operator - (const BigInt& B) const
{
	BigInt A = *this;

	if (B.sign)
		return A + (-B);
	else if (A.sign)
		return -(-A + B);
	else if (A < B)
		return -(B - A);

	int carry = 0; 

	for (size_t i = 0; i < B.elements.size() || carry != 0; i++)
	{
		A.elements[i] -= carry +  (i < B.elements.size() ? B.elements[i] : 0);

		carry = A.elements[i] < 0;

		if (carry != 0)
			A.elements[i] += BASE;
	}
	A.DelZeros();
	return A;

}
コード例 #2
0
ファイル: BigInt.cpp プロジェクト: Barbandy/Lab_Tchmk_3
BigInt BigInt::operator * (const BigInt& B) const
{
	BigInt A = *this;
	BigInt C;
	size_t temp = 0, carry = 0;
	C.elements.resize( A.elements.size() + B.elements.size());
	for(size_t i = 0; i < A.elements.size(); i++)
	{
		carry = 0;
		for(size_t j = 0; j < B.elements.size(); j++)
		{
			temp = A.elements[i] * B.elements[j] + C.elements[i+j] + carry; 
			carry  = temp / BASE;
			C.elements[i + j] = temp % BASE;
		}
		C.elements[i + B.elements.size()] = carry;
	}
	 C.sign = A.sign!=B.sign;

	C.DelZeros();

	return C;
}