01/10/2018, 09:17

Lỗi opeerator*= trong bigint c++

mọi người giúp me cái này với

em làm một cái bigint co đầy dủ + - * / ở phần * và chia thì em gặp vấn đề

là nếu em chi nhập 5 * 2 hay 6 * 9 thi vẫn bình thường nhưng nếu 20 * 2 hay 2 * 20 thi kết quả là 0. đây là code của em.

const Bigint & Bigint::operator*=(const Bigint & b)
{
	int num = 0;
	int carry = 0;
	for (int i = 0; i < DIGITS; i++)
	{
		num = (*this).digits[i] * b.digits[i] + carry;
		carry = num > 9;
		(*this).digits[i] = num - (carry ? 10 : 0);
	}
	return *this;
}

Bigint operator* (const Bigint& a, const Bigint& b) {
	Bigint re(a);
	re*= b;
	return re;
}

em cảm ơn nhiều lắm

Tao Không Ngu. viết 11:24 ngày 01/10/2018

Hi Nguyễn Văn Khoa.
Phep nhan sai.

Nguyễn Văn Khoa viết 11:29 ngày 01/10/2018

Em biết là sai nhưng vấn đề là em không biết nên sửa như thế nào, anh xem giúp em được không

Tao Không Ngu. viết 11:32 ngày 01/10/2018

Hi Nguyễn Văn Khoa.
Bạn code phép nhân sai. Cần 2 vòng for. Thường thì người ta định nghĩa phép nhân gán dựa trên phép nhân.

Nguyễn Văn Khoa viết 11:24 ngày 01/10/2018

vậy là em cần 1 loop for cho *this.digit[i] và 1 loop for cho b.digit[i[ phải không ạ ví dụ như

 for (int i = 0; i < DIGITS; i++) {
       for (int j = 0; j < *this.size(); j++) {
           num = (*this).digits[i] * b.digits[j] + carry;
           carry = num > 9;
            (*this).digits[i] = num - (carry ? 10 : 0); 
      }
}
return *this;

giống như vậy phải không anh

Tao Không Ngu. viết 11:30 ngày 01/10/2018

Hi Nguyễn Văn Khoa.
Cái đó nó là cách thực hiện phép nhân bạn xem lại cách thực hiện phép nhân số có nhiều chữ số.

Nguyễn Văn Khoa viết 11:26 ngày 01/10/2018

anh cho em 1 ví dụ cụ thể được không ạ

Tao Không Ngu. viết 11:18 ngày 01/10/2018

Hi Nguyễn Văn Khoa.
http://360do.vn/index.php/Nuoi-day-con/Toan-lop-4-5-Phep-nhan-voi-so-co-2-chu-so-4-buoc-chuan-de-thuc-hien-221.html

Nguyễn Văn Khoa viết 11:24 ngày 01/10/2018

em hỏi về c++ mà

Tao Không Ngu. viết 11:22 ngày 01/10/2018

Hi Nguyễn Văn Khoa.
Có thuật toán rồi thì code theo thôi.

Nguyễn Văn Khoa viết 11:30 ngày 01/10/2018
	int num[DIGITS];
int carry = 0;
for (int i = 0; i < DIGITS; i++) {
	for (int j = 0; j < DIGITS; j++) {
		num[i+j] += (*this).digits[i] * b.digits[j];
		if (num[i+j] > 9) {
			num[i + j + 1] += num[i + j] / 10;
			num[i + j] = num[i + j] % 10;
		}
	}

}
return *num;

em viết như vậy đúng chưa anh mà nó không ra kết quả

Bài liên quan
0