说明

方法 :
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);
		}
	}
}

效果

心得

对 % 和 / 两个运算符 的另类理解:

  1. n%s = 取十进制的n在s进制下最后一位的数

比方说:195521%2
十进制的195521在二进制的表示为101111101111000001,取最后一位1,
所以:195521%2=1

  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 );
}