『数学』题解 | #XOR和#
XOR和
http://www.nowcoder.com/practice/659dae5dc14a4a8f9d3594499c2aeace
找规律
- 当奇数比偶数大1的时候,odd^even=1
- 当偶数比奇数大1的时候,取决于even的最左边的二进制1的位置『但是,为了简化代码,请自己找规律』
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param n int整型
* @return long长整型
*/
long long Sum(int n) {
// write code here
//找到规律
//前偶后奇(偶数比奇数小),异或就是结果就是1
//前奇后偶数,异或结果就是——根据后边偶数最左边的位置-1
//第2个规律还能优化,看在哪个2^n周围
long long sum=0;
//奇数和偶数,
if( n&1 )
{
sum=n/2+1;
}
else
{
sum=n/2;
}
for( int i=2; i<=n; i+=2 )
{
sum+=( i^(i-1) );
}
return sum;
}
};
查看13道真题和解析
