Code:
ostream& operator<< (ostream& out, const GrandInt& g)
{
if(g.sign) out << '-';
GrandInt *temp=new GrandInt;
*temp=g;
while(temp->Value->GetHead()!=NULL)
{
out << temp->Value->GetHead()->GetDataNode();
temp->Value->DeleteHeadNode();
}
return out;
}
istream& operator>> (istream& in, GrandInt& g)
{
//thuc hien quet 1 so
char c;
in >> c;
switch (c)
{
case '-': g.sign=1;
case '+': in.get(c);
}
if(!isdigit(c))
{
g=GrandInt((long)0);
return in;
}
g.Value=new LinkedList;
do
{
g.Value->InsertTail(c-'0');
in.get(c);
} while (isdigit(c)); //diem ket thuc cua viec quet la 1 ki tu khac so
return in;
}
uh! Vẫn là bài toán với số lớn của mình thôi! Nhưng không hiểu sao, ở trong hàm main(), nếu mình dùng từ 3 lệnh cout liên tiếp trở lên thì nó bị in ra kết quả sai hoặc thậm chí bị đơ.
vd:
Code:
void main()
{
GrandInt x,y;
cin >>x;
cin>>y
cout<<(x+y);
cout<<(x-y); //đến đây thì OK
cout<<(x*y); //nhưng nếu thêm dòng này thì nó lại không tính ra kết quả nữa
//nếu đổi thứ tự tính phép trừ rồi đến nhân rồi đến cộng
//thì chỉ 1 phép tính trù tính đúng, phép nhân ko dc tính, phép cộng bị tính sai.
//nhưng nếu chỉ in ra 1 kết quả thì luôn đúng!
Mình nghĩ có lẽ mình sai ở hàm >> và <<. Mình thử sửa lại như sau: (không động đến các đối tượng in và out nữa)
Code:
ostream& operator<< (ostream& out, const GrandInt& g)
{
if(g.sign) cout << "-";
GrandInt *temp=new GrandInt;
*temp=g;
while(temp->Value->GetHead()!=NULL)
{
cout << temp->Value->GetHead()->GetDataNode();
temp->Value->DeleteHeadNode();
}
}
istream& operator>> (istream& in, GrandInt& g)
{
//thuc hien quet 1 so
char c;
cin>>c;
switch (c)
{
case '-': g.sign=1;
case '+': cin.get(c);
}
if(!isdigit(c))
{
g=GrandInt((long)0);
return in;
}
g.Value=new LinkedList;
do
{
g.Value->InsertTail(c-'0');
cin.get(c);
} while (isdigit(c)); //diem ket thuc cua viec quet la 1 ki tu khac so
}
thì nó báo lỗi:
Code:
16 bit MS-DOS Subsystem
Turbo C++ IDE
The NTVDM CPU has encounterred an illegal instruction
CS:ffd8 IP:0021 OP:f0 60 60 f0 00 Choose 'Close' to terminate the application
