我有一个列表的函数,例如{10,14,2,4,8} 然后我遍历整个列表,然后我将它除以除数然后%2.循环应该继续运行,直到除数大于列表中的最大数。样本输出将是;
10=0
14=0
2=0
4=0
8=0
然后除数乘以2并产生。
10=1
14=1
...
我只获得第一部分,然后停止。我知道我的逻辑在哪里错了。
void Splice(std::list<int> list_Original)
{
int largest_number_in_list=getMax(list_Original);
int divisor=1;
std::list<int> new_list;
for(std::list<int>::iterator i=list_Original.begin();i != list_Original.end();i++)
{
if(divisor<largest_number_in_list)
{
int n=((*i/divisor)%2);
std::cout<<*i<<"="<<n<<std::endl;
//new_list.push_back(n);
divisor=2*divisor;
//std::cout<<"hihh";
}
for(std::list<int>::iterator i=new_list.begin();i!=new_list.end();i++)
{
std::cout<<*i<<std::endl;
}
}
}
答案 0 :(得分:0)
忽略你正在使用“新列表”做的任何事情,你在divisor
循环迭代列表一次之后就会退出。你也在每次迭代中加倍除数。您希望在for
和最大数字之间进行检查以循环while
循环,因此请使用while (divisor < largest_number_in_list)
{
for(std::list<int>::iterator i=list_Original.begin();i !=list_Original.end();i++)
{
int n=((*i/divisor)%2);
std::cout<<*i<<"="<<n<<std::endl;
}
divisor=2*divisor;
}
。
change_table