题目:请实现一个函数,输入一个整数,输出该数的二进制表示,并计算出二进制中1的个数。例如输入9,输出二进制为1001,有两位1,输出2。
算法分析:
把一个整数减去1,再和原整数做与运算,会将该整数从右侧数第一个1变为0,如1100 -1 = 1011;1100&1011 = 1000,最右边1
变为了0,重复此操作,则可以将所有的1全部变为0,循环次数即为二进制中1的个数。
int NumberOf1( int n ){
int count = 0;
while(n != 0){
++count;
n = (n-1)&n;
}
return count;
}
总结:
1.将十进制转化为二进制字符串方法:Integer.toBinaryString(i);
2.将字符串转化为数字方法:number = Integer.parseInt(str);
Java代码实现:
/**************************************************************
* Copyright (c) 2016,
* All rights reserved.
* 版 本 号:v1.0
* 题目描述:二进制中1的个数
* 请实现一个函数,输入一个整数,输出该数的二进制表示,并计算出二进制中1的个数。例如输入9,输出二进制为1001,有两位1,输出2。
* 输入描述:请输入一个十进制数字:
* 254
* 程序输出: 输入的十进制数字的二进制为:
* 11111110
* 此二进制中1的个数为:7
* 问题分析: 1.将十进制转化为二进制字符串方法:Integer.toBinaryString(i);
* 2.将字符串转化为数字方法:Integer.parseInt(str);
* 算法描述:把一个整数减去1,再和原整数做与运算,会将该整数从右侧数第一个1变为0,如1100 -1 = 1011;1100&1011 = 1000,最右边1
* 变为了0,重复此操作,则可以将所有的1全部变为0,循环次数即为二进制中1的个数。
* 完成日期:2016-08-04
***************************************************************/
package org.marsguo.offerproject;
import java.util.Scanner;
class CountNumberof1{
private String BinaryString;
private int count = 0;
public void CountNumberof1Fun(int i){
System.out.println("输入的十进制数字的二进制为:");
BinaryString = Integer.toBinaryString(i); //将十进制转化为二进制
System.out.println(BinaryString);
while(i != 0){ //判断1个数循环
++count;
i =(i-1)&i;
}
//return count;
System.out.println("此二进制中1的个数为:" + count);
}
/*public void print(String s){
}*/
}
public class Numberof1 {
public static void main(String[] args){
int innumber;
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个十进制数字:");
String str = scanner.nextLine();
innumber = Integer.parseInt(str); //将字符串转化为数字;
CountNumberof1 countnumberof1 = new CountNumberof1();
countnumberof1.CountNumberof1Fun(innumber);
}
}
程序运行结果: