尝试查找满足 n + x = n ^ x 的 x 数失败,并超时
我正在尝试使用Java 8的新功能(例如s)从Hacker Rank站点的Bit Manipulation部分解决以下问题。Stream
问题描述:
给定一个整数 n,找到每个 x,使得:
- 0 <= x <= n
- n + x = n ^ x
其中 ^ 表示按位异或运算符。然后打印一个整数,表示满足上述条件的 x 的总数。
约束
- 0 <= n <= 1015
样品输入: 5
示例输出:2
解释:
对于 n = 5,x 值 0 和 2 满足以下条件:
- 5 + 0 = 5 ^ 0 = 5
- 5 + 2 = 5 ^ 2 = 7
因此,我们打印 2 作为我们的答案。
样品输入:10
示例输出:4
解释:对于 n = 10,x 值 0、1、4 和 5 满足以下条件:
- 10 + 0 = 10 ^ 0 = 10
- 10 + 1 = 10 ^ 1 = 11
- 10 + 4 = 10 ^ 4 = 14
- 10 + 5 = 10 ^ 5 = 15
因此,我们打印4作为我们的答案。
我的代码如下:
public class SumVsXor
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
long n = in.nextLong();
long count = LongStream.rangeClosed(0, n)
.filter(k -> k + n == (k ^ n))
.count();
System.out.println(count);
}
}
问题是此代码未通过所有测试用例。
它适用于 的小值,但适用于较大的值,例如由于超时而失败。n
1000000000000000
我想知道是否无法处理这么多元素的s。LongStream
Stream