剑指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代码实现:
程序运行结果:
算法分析:
把一个整数减去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); } }
程序运行结果:
相关文章推荐
- 剑指offer - 面试题10:二进制中1的个数
- 剑指offer——面试题10输入一个十进制整数,统计其中二进制1的个数
- 剑指offer 面试题10 计算数字中1的个数
- 【剑指offer】2.4.3位运算——面试题10:二进制中1的个数
- 剑指offer面试题10-二进制中1的个数
- 剑指offer-面试题10-二进制中1的个数
- 剑指offer——面试题10:二进制中1的个数
- 剑指offer-chapter2-面试题10-二进制中1的个数(java)
- 九度剑指Offer面试题10:二进制中1的个数(Java题解)
- [剑指offer]面试题10:二进制中1的个数
- 剑指offer-面试题10-二进制中1的个数
- 剑指Offer面试题10:二进制中1的个数
- 剑指Offer之面试题10:二进制中1的个数
- 【面试题】剑指Offer-10-统计二进制中1的个数
- 剑指offer 面试题10 二进制中1的个数
- 剑指offer面试题10:二进制中1的个数(与位运算有关)
- 【剑指Offer学习】【面试题10 :二进制中1 的个数】
- 剑指Offer面试题10[二进制中1的个数]
- 剑指offer--面试题10:二进制中1的个数--Java实现
- 剑指offer--面试题10-整数的二进制中有多少个1