01/10/2018, 10:23

Không tìm được lỗi trong code bignum

#include<iostream>
#include<string>
using namespace std;
//Lấy chuỗi ngược, vd: qwerty -> ytrewq
string sLat(const string sSo) {
	string sResult = "";

	for (int i = sSo.length() - 1; i > -1; i--)
		sResult += sSo[i];

	return sResult;
}

struct So{
	string sSo;
};


So operator+(So oSo1,So oSo2){
	string sResult = "",
		sSo1 = sLat(oSo1.sSo),
		sSo2 = sLat(oSo2.sSo);
	int nLength;

	//Cân bằng độ dài 2 chuỗi, vd: 1234, 56 -> 1234, 5600
	if (sSo1.length() > sSo2.length()) {
		nLength = sSo1.length();
		sSo2.insert(sSo2.end(), nLength - sSo2.length(), '0');
	}
	else {
		nLength = sSo2.length();
		sSo1.insert(sSo1.end(), nLength - sSo1.length(), '0');
	}

	//Xử lý 
	for (int i = 0; i < nLength; i++) {
		if (i == 0)
			sResult += sSo1[i] + sSo2[i] - 48;
		else if (sResult[i - 1] > '9') {
			sResult[i - 1] -= 10;
			sResult[i] += sSo1[i] + sSo2[i] - 47;
		}
		else
			sResult[i] += sSo1[i] + sSo2[i] - 48;
	}

	if (sResult.back() > '9') {
		sResult.back() -= 10;
		sResult += '1';
	}

	//Kết quả
	So oResult;
	oResult.sSo = sLat(sResult);
	return oResult;
}

int main() {
	cout << "Nhap so thu 1: " << '	';
	So oSo1;
	cin >> oSo1.sSo;

	cout << "Nhap so thu 2: " << '	';
	So oSo2;
	cin >> oSo2.sSo;

	cout << "Ket qua: " << '	';
	So oResult;
	oResult = oSo1 + oSo2;
	cout << oResult.sSo << endl;

	system("pause");
	return 0;
}

Đây là INPUT(chưa vào số thứ 2 - chưa nhấn Enter)

Đây là OUTPUT(vào số thứ 2 - đã nhấn Enter)

HK boy viết 12:28 ngày 01/10/2018

Bạn đã thử test chưa mà biết là code lỗi? Nếu như có test nào sai thì bạn up cả input + output lên.

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

Hi Nguyên Trọng.
Chỗ này sai sai thì phải.

//Cân bằng độ dài 2 chuỗi, vd: 1234, 56 -> 1234, 5600
rogp10 viết 12:39 ngày 01/10/2018

Ban đầu đã có đảo ngược rồi

Code này không hay ở chỗ biểu diễn nội và biểu diễn để hiển thị là một. (ý mình ko phải number format đâu)

Nguyên Trọng viết 12:38 ngày 01/10/2018

Bạn nói rõ được không? Bạn cho mình ý tưởng code của bạn nhé!

Nguyên Trọng viết 12:33 ngày 01/10/2018

cảm ơn mọi người, mình tìm được lỗi ngu rồi, mọi người làm ơn cho mình ý tưởng để cải thiện thuật toán với!

Bài liên quan
0