给你一个 正 整数 n
。
用 even
表示在 n
的二进制形式(下标从 0 开始)中值为 1
的偶数下标的个数。
用 odd
表示在 n
的二进制形式(下标从 0 开始)中值为 1
的奇数下标的个数。
请注意,在数字的二进制表示中,位下标的顺序 从右到左。
返回整数数组 answer
,其中 answer = [even, odd]
。
示例 1:
输入:n = 50
输出:[1,2]
解释:
50 的二进制表示是 110010
。
在下标 1,4,5 对应的值为 1。
示例 2:
输入:n = 2
输出:[0,1]
解释:
2 的二进制表示是 10
。
只有下标 1 对应的值为 1。
提示:
1 <= n <= 1000
分析:将 n 与 1 进行“与”运算,如果结果为1,说明当前最后一位为1,否则为0。将结果记录后,n 右移一位继续同样的步骤,直到 n=0,返回结果。
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* evenOddBit(int n, int* returnSize) {
int *ans=(int*)malloc(sizeof(int)*2);
*returnSize=2;ans[0]=ans[1]=0;
int t=0;
while(n>0)
{
n&1?ans[t]++:0;
t&1?(t=0):(t=1);
n=n>>1;
}
return ans;
}