主题:请问下个问题~~希望能得详细解答
pengeal
[专家分:0] 发布于 2010-05-10 12:14:00
1.实现一个函数,他接收输入参数n(n取值范围为32位无符号整型),返回值为:不小于n并且为2的整数次冥的最小整数。例如,输入参数为100时,返回128(2的7次冥)。(解题时尽量考虑执行效率及内存占用)
能详细帮我解答下吗??? 谢谢了
最后更新于:2010-05-10 13:44:00
回复列表 (共3个回复)
沙发
强强 [专家分:4740] 发布于 2010-05-10 13:21:00
位移,还有什么更好的办法请指教
板凳
bruceteen [专家分:42660] 发布于 2010-05-10 14:36:00
我猜算法应该是
m = n & (n-1)
if( m == 0 )
return n;
else
n = m;继续循环
3 楼
bruceteen [专家分:42660] 发布于 2010-05-10 21:45:00
#include <stdint.h>
uint32_t foo( uint32_t n )
{
if( n > 0x80000000 )// error
return -1;
if( (n&(n-1)) == 0 )
return n;
for( uint32_t m; (m=n&(n-1))!=0; n=m );
return n<<1;
}
#include <iostream>
using namespace std;
int main()
{
cout << foo(0) <<'\n';
cout << foo(-1) <<'\n';
cout << foo(100) <<'\n';
cout << foo(128) <<'\n';
return 0;
}
我来回复