Dùng STL Container Stack để chuyển từ hệ 10 sang hệ 2

Lỗi sai của chương trình này :blush:?

#include <iostream>
#include <stack>
using namespace std;

int main()
{
    stack<int> nhiPhan;
    int n = 4;
    while(n > 0)
    {
        int dv = n%2;
        nhiPhan.push(dv);
        n = n/2;
    }

    for(int i = 0; i < nhiPhan.size(); i++)
    {
        cout << nhiPhan.top();
        nhiPhan.pop();
    }

    return 0;
}
1 Like

Nhìn vào thấy hay, đang tính comment khen thì đọc ngay cái câu “Tìm lỗi sai”. Ẹc, bookmark hóng cao nhân vào xử.

sai chỗ vòng lặp,tại lúc trưa ngồi code bài tương tự nên mới biết, bình thường không debug chắc chịu. vì số phần tử trong stack giảm dần sau mỗi lần lặp (hàm pop()), trong khi i tăng dần, =>tối thiểu có stack[n-1] với n>=2…trong không bao giờ truy xuất dc. Không biết giải thích đúng k nữa, có j bạn nào giải thích cho dễ hiểu hơn với.
thay for(int i = 0; i < nhiPhan.size(); i++) bằng while(nhiPhan.size()>0)

2 Likes

đúng rồi chứ gì nữa đáp án là đây này

#include <iostream>
#include <stack>
using namespace std;

int main()
{
    stack<int> nhiPhan;
    int n = 4;
    while(n > 0)
    {
        int dv = n%2;
        nhiPhan.push(dv);
        n = n/2;
    }

    while(!nhiPhan.isEmpty())
    {
        cout << nhiPhan.top();
        nhiPhan.pop();
    }

    return 0;
}
1 Like

@Dung_Kon nghiên cứu thêm STL nữa đi, khi ra trường sẽ trùm C++ luôn :smiley:

1 Like

I moved a post to a new topic: lỗi Break khi run

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