为什么这段代码不允许我接收整个数组?

时间:2019-09-09 20:09:05

标签: c++

#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个整数数组,这是怎么回事?

1 个答案:

答案 0 :(得分:1)

这是您的bin函数,其功能已降至最低:

string bin(int n){
    while(n!=0)
    {
        n%=2;
    }  
    return {};
}

如果n甚至是您将在第一次迭代中将其设置为0,否则将其设置为1,之后再也不要更改(1%2==1)。因此,您有一个无限循环。我不会破坏您完成本练习的“乐趣”,因此,我仅向您指出使用调试器。如果您逐行浏览代码,您可能已经观察到n永远不会改变以及循环为什么不会停止的原因。

PS :(扰流板警报),您可能想看看std::bitset(扰流板末端)