问个超级弱智的问题,怎么判定一个数字是2的冥

时间:2008-05-10 18:53:23   来源:论坛整理  作者:  编辑:chinaitzhe

我只能想出以下的函数,肯定是不对的,请各位高手帮我出出主意,谢谢
bool f(int a)
{
for(i=0;i <99999;i )

{

if(a==1 < <i)
return true;
else
return false;
}



}
网友回复:
C/C code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/



#include  <iostream>

using namespace std; 



int main(int argc, char* argv[]) 

{ 

    for (unsigned int i = 0; i < 9999;   i)

        if ((i&(i-1)) == 0)

            cout << i << endl;

    return 0; 

} 


网友回复:int 溢出了 99999
网友回复:
C/C code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/





inline bool Is2Power(unsigned int n){return (n&(n-1)) == 0;}


网友回复:对于楼主的程序,最多循环到31,即i <32就可以了,所以设i <99999是多于的.同时if else 存在逻辑错误.


解释下飞雪的程序:
因为一个数若是2的冥,则其二进制只有一个1,后面全为0(如4为100,8为1000).其减1之后,先前1后面的0全变为1,所以((i&(i-1)) == 0)则i为2的冥.
关键字:超级,弱智,问题,判定,一个,
上一篇:三级大问题

文章评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面