30/09/2018, 18:27

Xin hỏi lỗi ra kết quả đúng nhưng in ra thì ra 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 ạ?

... viết 20:30 ngày 30/09/2018

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

Ideone.com

Ideone.com

Ideone is something more than a pastebin; it's an online compiler and debugging tool which allows to compile and run code online in more than 40 programming languages.

Nguyễn Cát Long Huy viết 20:29 ngày 30/09/2018

kết quả đây nè anh

Gió viết 20:27 ngày 30/09/2018

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

Nguyễn Cát Long Huy viết 20:32 ngày 30/09/2018

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

Gió viết 20:33 ngày 30/09/2018

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…

Nguyễn Cát Long Huy viết 20:41 ngày 30/09/2018

ủ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?

Gió viết 20:41 ngày 30/09/2018

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

Nguyễn Cát Long Huy viết 20:27 ngày 30/09/2018

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?

Gió viết 20:38 ngày 30/09/2018

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

Nguyễn Cát Long Huy viết 20:42 ngày 30/09/2018

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

Bài liên quan
0