您的位置:首页 > Web前端

剑指offer-第三天

2016-07-03 09:56 323 查看
1、二进制中1的个数

/*
*题目描述:求二进制中1的个数
*思路:采用n&(n-1)的方法,直至该表达式为0,统计执行次数即可
*/

public int NumberOf1(int n){
int sum=0;
while(n!=0){
n&=(n-1);
sum++;
}
return sum;
}

2、数值的整数次方

/*
*题目描述:数值的整数次方
*思路:本题考查细节,要尽可能地将所有可能出现的情况都考虑周全
*/

public double Power(double base,int exponent){
boolean flag=false;
if(equals(base,0.0)&&exponent<0){
flag=true;
return 0.0;
}
unsigned int absexponent=(unsigned int)(exponent);
if(exponent<0)
absexponent=(unsigned int)(-expnent);

double result=PowerWithUnsignedExponent(base,absexponent);
if(expnent<0)
result=1.0/result;

return result;
}

public double PowerWithUnsignedExponent(double base,int exponent){
double result=1;
while(exponent--){
result*=base;
}
return result;
}

/*整数次方优化算法
public double PowerWithUnsignedExponent(double base,int exponent){
if(exponent==0) return 1;
if(exponent==1) return base;

double result=PowerWithUnsignedExponent(base,exponent>>1);
if(exponent&Ox1==1)
result*=base;
return result;
}
*/
public boolean equals(double num1,double num2){
if((num1-num2>-0.0000001)&&(num1-num2<=0.0000001)){
return true;
}
else return false;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: