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)
Bài liên quan
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.
Hi Nguyên Trọng.
Chỗ này sai sai thì phải.
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)
Bạn nói rõ được không? Bạn cho mình ý tưởng code của bạn nhé!
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!