WA40!求救!!!

题面:
题目描述
题目描述:

定义一个函数 f=lowbit(x),这个函数的值是 x 的二进制表达式中最低位的 1 所对应的值。

例如lowbit(6) 就等于 2,因为 (110)2 中最低位(就是从右往左数的第二位)对应的数是2^1=2

所以假设一个数的二进制最低位的1在从右往左数的第k位,那么它的lowbit值就是2^(k−1)
请你设计一个函数,可以计算出x的lowbit值:

输入格式:
一个十进制整数x

输出格式:
一个十进制整数

输入样例
6

输出样例
2

补充:关于lowbit运算,最著名的应用应该算是树状数组。但是lowbit的神妙远远不止树状数组,在很多二进制和位运算的相关题目中,都有lowbit运算的影子。甚至,在状态压缩DP中,lowbit也扮演着一份不可忽视的角色。
代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll x;
ll f(ll);
ll lowbit(ll, ll);
int main()
{
	scanf("%lld", &x);
	printf("%lld", f(x));
	return 0;
}
ll f(ll x)
{
	return lowbit(2, (x & (-x)) - 1);
}
ll lowbit(ll n, ll k)
{
	if (k == 0)
	{
        return 1;
	}
    else if (k % 2 == 1)
    {
        return lowbit(n, k - 1) * n;
	}
    else
    {
    	ll temp = lowbit(n, k / 2);
        return temp * temp;
    }
}

WA40分!

求大佬指点!

4 个赞

lowbit吗?

4 个赞

题目标题给个

4 个赞

不用了,你用位运算做

  • 精华:
    int a=x&(x^(x-1));
    能过的给个解决方案
4 个赞

@周子寓 我就是用位运算做的呀,下面那是快速幂 ,计算2^(k-1) :sweat_smile: :sweat_smile: :sweat_smile:,看到那个f函数了吗?你这种方法我也试过了,过不了 :sob: :sob: :sob:

5 个赞

我再试试

4 个赞

有没有AC的大佬帮帮忙!

4 个赞

^不是快速幂

4 个赞

试试这个:

#include<bits/stdc++.h>
using namespace std;
int main(){
	int x;
	cin>>x;
	int a=x&(x^(x-1));
	cout<<a;
}
4 个赞

明天再说,我下了

4 个赞

竟然过了!
题目不是让求2^(k−1)吗?

4 个赞

哦,不需要再快速幂了,谢谢!解决方案给你了!

3 个赞

栓Q :grinning: :grinning: :grinning:

3 个赞

有没有可能" ^ "不一定是幂呀?好像是异或

3 个赞

给赞

2 个赞

我也A了(40pts->100pts)

3 个赞

me too

1 个赞

@周子寓 @梁帅 你们的头像不谋而合(我也不知道为什么不是两个都是S或两个都是U)

1 个赞