所有测试用例都将小数点转换为二进制数

Conversion of Decimal to Binary number with all the test Cases

本文关键字:转换 二进制数 小数点 测试用例      更新时间:2023-10-16

这是我的实现,我将数字拿到数学计算中,然后将其放入堆栈中...但是,即使我在问题上的逻辑是正确的,它也无法产生正确的输出...请检测我的实施中有什么问题。这是我学院两家公司提出的竞争性编程问题。因此,请帮助我纠正实施。我只想知道我的实现问题....

实际问题:输入:输入的第一行包含一个整数t表示测试用例的数量。每个测试箱都会有一条线,其中包含n。输出:在一行中打印所有具有1到n的十进制值的二进制数。约束:1≤t≤1061≤n≤106

示例:输入:225

输出:1 101 10 11 100 101

解释:TestCase 1:1到2的二进制数为1和10。

这是所需的输出输入:225

输出:1 101 10 11 100 101

我的输出是:输入:13您的输出是:

可以在这里告诉我不正确输出的原因。

#include<iostream>
#include <stack> 
#include <queue> 
using namespace std;
int main()
{
    int T ;
    cin>>T;
    while(T--)
    {
        int  n;
        cin>>n;
        for(int i=1;i<=n;i++)
        {   
            stack <int > s;
            int num=i;
            while(num>0)
            {  
                s.push(num%2);
                num=num/2 ;
            }
            for(int j=0;j<s.size();j++)
            {
                cout<<s.top();
                s.pop();
            }
            cout<<" ";
        }
        cout<<endl;
    }
return 0 

这是所需的输出

Input:
2
2
5
Output:
1 10
1 10 11 100 101

我的输出是:

For Input:
1
3
Your Output is:

可以在这里告诉我不正确输出的原因。

问题在这里:

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

假设s有四个元素。
在第一次迭代中,j为0,s.size()为4。
第二,j为1,s.size()为3。
第三,j为2,s.size()为2,因此循环终止。
那是两个迭代,而不是四个。

而不是计算要弹出的时间,只需弹出直到堆栈为空的时间:

while (!s.empty())
{
    cout << s.top();
    s.pop();
}