我被要求将自然数转换为二进制表示,并计算二进制表示中连续“1”的数量。例如:- 输入数字是“5”,那么它的输出应该是“1”。我不知道问题出在哪里,但在“524283”和“524275”这两种情况下都失败了。这是我在 C++ 中的代码:-
int main(){
int n,repeat=0,count=0,max=0;
cin >> n;
std::stack<int> binNum;
while(n>0)
{
binNum.push(n%2);
n=n/2;
}
while(!binNum.empty())
{
if( !binNum.empty() && binNum.top()==1 )
{
count++;
if(repeat>=count)
{
max=repeat;
}
else
{
max=count;
}
repeat=count;
binNum.pop();
if(!binNum.empty() && binNum.top()==0)
{
count=0;
binNum.pop();
}
}
else
{
binNum.pop();
}
}
cout<<max;
return 0;
最佳答案
改变
if(binNum.top()==1 && !binNum.empty())
到
if(!binNum.empty() && binNum.top()==1 )
如果栈是空的,不想先取栈顶再检查是否为空。
同理,改
if(binNum.top()==0 && !binNum.empty())
到
if(binNum.empty() && binNum.top()==0 )
关于c++ - 统计二进制数中连续1的个数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42711500/