说明
方法 :
count 实现练习需求的功能
print 打印二进制形式 (十进制转二进制)
代码
package cn.tedu.exercise;
public class Test1_5 {
public static void main(String[] args) {
Integer N = 195521 ; //数
Integer c = 2; //进制
print(N,c); //打印N的二进制形式
System.out.println();
//计算N在二进制形式中,1的个数,比如:二进制形式为1010,count=2
Integer number = count(N) ;
System.out.println(number);
}
public static Integer count(Integer N) {
return N<1 ? 0 : N%2==0 ? count(N/2) : count(N/2)+1;
}
public static void print(Integer I , Integer c) {
if(I<c) {
System.out.print(I);
}else {
print(I/c,c);
System.out.print(I%c);
}
}
}
效果
心得
对 % 和 / 两个运算符 的另类理解:
- n%s = 取十进制的n在s进制下最后一位的数
比方说:195521%2
十进制的195521在二进制的表示为101111101111000001,取最后一位1,
所以:195521%2=1
- n/s = 令十进制的n在s进制下向右位移一位
比方说:195521/2
十进制的195521在二进制的表示为101111101111000001,向右位移一位10111110111100000,转回十进制为97760
所以:195521/2=97760
书上的答案
《数据结构与算法分析_java语言描述_Mark_Allen_Weiss著》
public static int ones( int n )
{
if( n < 2 )
return n;
returnn%2+ ones( n / 2 );
}