【算法-Java实现】计算int对应二进制中1的个数
一.问题描述:
1.输入:输入一个int类型整数
2.输出:输出这个整数int对应二进制中1的个数
比如:输入14,对应的二进制数是1110,则输出3
输入15,对应的二进制数是1111,则输出4
二.问题解答:
1.输入一int类型十进制数,转换为二进制数(除二取余法),创建一个String类型字符串s依次存入余数,将s转为字符数组,创建统计变量count统计数组中1的个数即可。
2.为了方便将这个二进制数的打印,本题将String字符串转为StringBuffer字符串sb,调用sb的reverse()方法即可打印出这个二进制数
3.reverse()方法实现的是字符串反转,至于为何要实现反转,具体查阅除二取余法
比如:输入14,s中存放的依次为0111,调用b.reverse().toString()即可打印出1110
三.算法分析:
时间复杂度O(n),额外空间复杂度O(1)
代码如下
import java
.util
.*
;
public class Solution {
public static void main(String
[] args
) {
Scanner in
=new Scanner(System
.in
);
int n
=in
.nextInt();
int result
=countBit
(n
);
System
.out
.println(result
);
}
public static int countBit
(int n
) {
String s
="";
while(n
>0) {
int a
=n
%2;
n
/=2;
s
+=Integer
.valueOf(a
);
}
StringBuffer sb
=new StringBuffer(s
);
String s2
=sb
.reverse().toString();
int count
=0;
char[] array
=s2
.toCharArray();
for(int i
=0;i
<array
.length
;i
++) {
if(array
[i
]==1);
count
++;
}
return count
;
}
}