c++ - 统计二进制数中连续1的个数

标签 c++ stl stack

我被要求将自然数转换为二进制表示,并计算二进制表示中连续“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/

相关文章:

c - 弹出栈C中的头元素

multithreading - POSIX 线程堆栈内存 - 我们可以有不同的堆栈大小和安全问题吗?

c++ - 为什么类(class)特化存在错误?

c++ - std::(customization point) 是否调用最合适的重载?

c++ - C++中集合的运算符重载

c++ - std::map 只读位置的分配

c++ - stringstream operator << 用于模板类型

c++ - C POSIX API 是否与 C++ STL 兼容

java - 用堆栈覆盖对象 (Java)

c++ - 这个结构怎么会有 sizeof == 0?