首页 > 解决方案 > 为什么这段代码不允许我接收整个数组?

问题描述

#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整数数组,对于数组中的每个元素,我应该计算它的二进制表示形式的个数。我写了一个函数,它需要一个整数并返回一个包含它的二进制表示的字符串。但我想知道为什么我的代码没有结束,并且不允许我接收数组中的其他数字。

2例如,如果我输入 1 并等待永远输入第二个数字,那么有一个测试用例并且只有整数数组,发生了什么?

标签: c++

解决方案


这是您的bin功能减少到最低限度:

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

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

PS:(剧透警告)你可能想看看std::bitset(剧透结束)


推荐阅读