剑指offer-第三天

来源:互联网 发布:java输出等腰三角形 编辑:程序博客网 时间:2024/06/11 12:00
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;
}
0 0
原创粉丝点击