[英]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.