回 帖 发 新 帖 刷新版面

主题:请问下个问题~~希望能得详细解答

1.实现一个函数,他接收输入参数n(n取值范围为32位无符号整型),返回值为:不小于n并且为2的整数次冥的最小整数。例如,输入参数为100时,返回128(2的7次冥)。(解题时尽量考虑执行效率及内存占用)


能详细帮我解答下吗??? 谢谢了

回复列表 (共3个回复)

沙发

位移,还有什么更好的办法请指教

板凳

我猜算法应该是

m = n & (n-1)
if( m == 0 )
   return n;
else
   n = m;继续循环

3 楼

#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;
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册