您的位置:首页 > 职场人生

剑指offer面试题10:计算二进制中1的个数

2016-08-04 21:36 381 查看
题目:请实现一个函数,输入一个整数,输出该数的二进制表示,并计算出二进制中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);
}
}

程序运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息