繁体   English   中英

使用所有测试用例将十进制数转换为二进制数

[英]Conversion of Decimal to Binary number with all the test Cases

这是我的实现,我通过进行数学计算将数字放入堆栈中......但即使我关于问题的逻辑是正确的,它也不会产生正确的输出......请检测我的实现中有什么问题。 这是我所在学院的两家公司提出的竞争性编程问题。 所以,请帮我更正实现....我只想知道我的实现有什么问题.....

实际问题:输入:输入的第一行包含一个整数 T,表示测试用例的数量。 每个包含 N 的测试用例将有一行。 输出:在一行中打印所有二进制数,其中包含从 1 到 N 的十进制值。 约束条件:1 ≤ T ≤ 106 1 ≤ N ≤ 106

示例:输入:2 2 5

输出:1 10 1 10 11 100 101

说明:测试用例 1:从 1 到 2 的二进制数是 1 和 10。

这是所需的输出输入:2 2 5

输出:1 10 1 10 11 100 101

我的输出是: For Input: 1 3 你的输出是:

这里的任何人都可以告诉我输出不正确的原因..

#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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM