二进制中1的个数
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
解题思路
第一种思路,准化成二进制表达,找出’1’的个数;
第二种优解,一个数减1,变化的是最右边的1变0,1右边的取反,1左边的数不会影响(建议自己手写推到感受一下)
代码
package offer.first;
public class jz011 {
public int NumberOf1(int n) {
String bs=Integer.toBinaryString(n);
char[] N=bs.toCharArray();
int count=0;
for(int i=0;i<N.length;i++){
if(N[i]=='1'){
count++;
}
}
return count;
}
//优解,介意自己手写推一下感受一下
public int NumberOf2(int n) {
int count=0;
for(count = 0;n!=0;count++){
n=n&(n-1);
}
return count;
}
public static void main(String[] args){
jz011 nu=new jz011();
System.out.println(nu.NumberOf1(11));
System.out.println(nu.NumberOf2(11));
}
}
数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
解题思路
从数学角度出发就是一个数的n次方,就是这个数乘n次;
代码
public class jzo12 {
public double Power(double base, int exponent) {
// double sum=1;
// if(exponent==0){
// return 1;
// }else if(exponent<0){
// double base1=1/base;
// for(int i=exponent;i<0;i++){
// sum*=base1;
// }
// }else{
// for(int i=0;i<exponent;i++){
// sum*=base;
// }
// }
// return sum;
double sum=1;
if(exponent==0){
return 1;
}else if(exponent>0){
for(int i=0;i<exponent;i++){
sum*=base;
}
}else{
sum=1/Power(base,0-exponent);
}
return sum;
}
public static void main(String[] args){
jzo12 pow=new jzo12();
System.out.println(pow.Power(3.0,-3));
}
}