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 ạ?
Bài liên quan
Không biết sao nhưng chạy thử trên ideone thì kết quả bình thường.
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.
kết quả đây nè anh
Thuật toán cộng số lớn của bạn bị sai
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…
ủ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
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
à ý bạn là nho=so/10? Nhưng cho mình hỏi vì sao lại ra kí tự đặc biệt?