位运算 | 二进制中1的个数 | 67638 | 34.21% |
题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
注意:如果int n,n为负数的话,右移会高位补1而不是0造成死循环。
class Solution {
public:
int NumberOf1(int n) {
int cnt=0;
unsigned t=n;
while(t)
{
cnt+=t&1;
t>>=1;
}
return cnt;
}
};
代码的完整性 | 数值的整数次方 | 61908 | 31.03% |
题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
坑点:指数可以为负数。
直接快速幂就好了。
class Solution {
public:
double Power(double base, int exponent) {
unsigned n=exponent;
if(exponent<0)
{
n=-exponent;
}
double ret=1;
while(n)
{
if(n&1)
{
ret*=base;
}
base*=base;
n>>=1;
}
if(exponent<0)
return 1/ret;
return ret;
}
};