#include <bits/stdc++.h>
using namespace std;
string bin(int n){
string x="";
while(n!=0)
{
int z=n%2;
x+=to_string(z);
n%=2;
}
return x;
}
int main(){
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++)
{
cin>>a[i];
string x=bin(a[i]);
int u=x.size();
int cnt=0;
for(int g=0;g<u;g++)
{
if(x[g]=='1')
++cnt;
}
cout<<cnt<<' ';
}
cout<<'\n';
}
}
该代码提供了几个测试用例,每个测试用例将具有一个n
整数数组,对于数组中的每个元素,我都应在其二进制表示形式中计数一个数。我编写了一个函数,该函数期望一个整数并返回一个包含其二进制表示形式的字符串。但是我不知道为什么我的代码没有结束,并且不允许我接收数组中的其他数字。
例如,如果我输入1并等待输入第二个数字,那么只有一个测试用例,只有2
个整数数组,这是怎么回事?
答案 0 :(得分:1)
这是您的bin
函数,其功能已降至最低:
string bin(int n){
while(n!=0)
{
n%=2;
}
return {};
}
如果n
甚至是您将在第一次迭代中将其设置为0
,否则将其设置为1
,之后再也不要更改(1%2==1
)。因此,您有一个无限循环。我不会破坏您完成本练习的“乐趣”,因此,我仅向您指出使用调试器。如果您逐行浏览代码,您可能已经观察到n
永远不会改变以及循环为什么不会停止的原因。
PS :(扰流板警报),您可能想看看std::bitset
(扰流板末端)