Code cộng hai số dưới dạng string ra kết quả đúng nhưng in ra file thì có kí tự đặc biệt

Em đang làm bài dùng string để cộng hai số. Nhưng khi in ra thì ra kí tự đặc biệt

int main()
{
    string a, b, c, t;
    fi >> a >> b;
    int n=b.size(), nho=0, them;
    if (a.size()>b.size())                // Khúc này là em cho chiều dài 2 xâu = nhau
    {
        them=a.size()-b.size();
        for (int i=1; i<=them; i++) t+='0';
        b=b.insert(0, t);
    }
    if (b.size()>a.size())
    {
        them=b.size()-a.size();
        for (int i=1; i<=them; i++) t+='0';
        a=a.insert(0, t);
    }
    for (int i=a.size()-1; i>=0; i--)
    {
        int so, kt=0;
        so=(a[i]-48)+(b[i]-48)+nho;
        if (so>=10)
        {
            nho=1;
            so=so-10;                   //Cái này là biến nhớ để cộng cho số sau
            kt=1;
        }
        if (so<10&&kt!=1)
            nho=0;
        c+=(so+48);
    }
    for (int i=c.size(); i>=0; i--) fo << c[i] ;
    fo.close(); fi.close();
}

Nếu khúc in ra em để có dấu cách for (int i=c.size(); i>=0; i--) fo << c[i] << " "; thì nó lại ra đúng. Ai có thể giải thích cho em không ạ?

Không biết sao nhưng chạy thử trên ideone thì kết quả bình thường.

2 Likes

kết quả đây nè anh :frowning:

Thuật toán cộng số lớn của bạn bị sai :frowning:

1 Like

sai chỗ nào vậy bạn?

nho có thể >1.
thay đoạn if chỗ nhớ:

nho+=a[i]-48+b[i]-48;
 so+=nho%10+48;
nho/=10;

sau vòng for:

while(nho)c+=nho%10+48,nho/=10;

for(i=c.size().. Là sai for(i=c.size()-1...

2 Likes

ủa nho s >1 được bạn? Cho 2 số lớn nhất là 9 + 9 = 18 thì cũng nhớ 1 thôi, rồi nhớ sẽ cộng vào số tiếp?

nho sẽ cộng vào số tiếp còn mình nếu dùng lệnh thế thì không phải dùng if

2 Likes

Mình cũng chưa hiểu ý bạn lắm. Tại nếu so>=10 thì mới có nho chứ bạn?

Nếu nho>=10 nho =1 thay =1 lệnh nho/=10 nhanh hơn mà. nhớ [0-19] nên 2 câu này tương đuong kq

2 Likes

à ý bạn là nho=so/10? Nhưng cho mình hỏi vì sao lại ra kí tự đặc biệt?

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?