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
整数数组,对于数组中的每个元素,我应该计算它的二进制表示形式的个数。我写了一个函数,它需要一个整数并返回一个包含它的二进制表示的字符串。但我想知道为什么我的代码没有结束,并且不允许我接收数组中的其他数字。
2
例如,如果我输入 1 并等待永远输入第二个数字,那么有一个测试用例并且只有整数数组,发生了什么?
解决方案
这是您的bin
功能减少到最低限度:
string bin(int n){
while(n!=0)
{
n%=2;
}
return {};
}
如果n
是偶数,您将0
在第一次迭代时将其设置为,否则您将其设置为1
并且以后永远不会更改它(1%2==1
)。因此,您有一个无限循环。我不会破坏你完成练习的“乐趣”,所以我只会指出你使用调试器。如果您逐行浏览您的代码,您可能已经观察到n
永远不会改变以及为什么循环不会停止。
PS:(剧透警告)你可能想看看std::bitset
(剧透结束)
推荐阅读
- ruby - id 为 123 的用户没有正确更新 id 为 123 的项目
- python - 为什么 Requests 库无法读取源代码?
- wysiwyg - 如何在 react-quill Hooks 中添加 className="" 和自定义标签?
- java - 如何移动 3d 对象并将其 360 度旋转显示在 Vuforia for android 的跟踪图像顶部?
- javascript - Javascript JSON 解析 php base64(file_get_contents($file)) 响应
- json - 如何处理不同的 JSON 模式并分派 hem 以由正确的解析器处理?
- c++ - constexpr 函数中的非文字(通过 std::is_constant_evaluate)
- javascript - 搜索使用异步存储存储的项目
- .net-core - 为什么在 vs 代码(.NET Core)中调试时不构建 C# 代码?
- flutter - 如何在 Flutter 中像 Youtube 一样显示时间