java中实现递归计算二进制表示中1的个数

借助Java语言,运用递归算法计算整数N的二进制表示中1的个数

/*use the recursive algorithme to calculate
 * the number of "1" in the binary expression
 * of an Integer N.
 * Note:if N is an odd, then
 * the result is the result of N/2 plus 1.
 * And the program use the bit operation to
 * improve efficency ,though it's seemingly
 * not necessary ,but the idea I think is good.
 * The program is writed by Zewang Zhang ,at
 * 2015-5-4,in SYSU dorms.
 */

public class CalculateNumberInBinaryExpression {
  //Main method.
  public static void main(String[] args) {

    //For example ,make N equals 13 ,the result shows 3
    System.out.println(numOfEven(13));

    //For example ,make N equals 128 ,the result shows 1
    System.out.println(numOfEven(128));
  }

  //The static method of numOfEven is the recursive method.
  public static int numOfEven(int x) {

    //The base of recursive.
    if(x==0) {
      return 0;
    }

    //If x is an odd.
    else if(x%2!=0) {
      return numOfEven(x>>1)+1;
    }

    //If x is an even except 0.
    else {
      while(x%2==0) {
        x=(x>>1);
      }
      return numOfEven(x);
    }
  }
}

来个最简单的,不过未测试:)

public int a(int i){
    if(i==0||i==1) return i;
    return i%2+a(i/2);

}

以上所述就是本文的全部内容了,希望大家能够喜欢。

(0)

相关推荐

  • Java,C#使用二进制序列化、反序列化操作数据

    java使用二进制序列化.反序列化的操作首先,要引入java.io下面相关包,或者直接写import java.io.*; 下面,为了书写操作的方便,采用复制文件,和throws声明异常的方式来写 复制代码 代码如下: public void test6() throws IOException { byte[] b = new byte[1024];//定义字节数组,缓冲 FileInputStream in = new FileInputStream("E:\\logo.gif")

  • Java基于TCP方式的二进制文件传输

    一个基于Java Socket协议之上文件传输的完整示例,基于TCP通信完成. 除了基于TCP的二进制文件传输,还演示了JAVA Swing的一些编程技巧,Demo程序 实现主要功能有以下几点: 1.基于Java Socket的二进制文件传输(包括图片,二进制文件,各种文档work,PDF) 2.SwingWorker集合JProgressBar显示实时传输/接受完成的百分比 3.其它一些Swing多线程编程技巧 首先来看一下整个Dome的Class之间的关系图: 下面按照上图来详细解释各个类的

  • java读写二进制文件的解决方法

    接口:Writerable 复制代码 代码如下: package com.geoway.pad.common; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; public interface Writerable {        //write         public void  write(DataOutput data) throws IOException;     

  • Java二进制操作(动力节点Java学院整理)

    移位 位运算中大多数操作都是向左移位和向右移位.在Java中,这对应着<<和>>这两个操作符,示例如下: /* 00000001 << 1 = 00000010 */ 1 << 1 == 2 /* 00000001 << 3 = 00001000 */ 1 << 3 == 8 /* 11111111 11111111 11111111 11110000 >> 4 = 11111111 11111111 11111111 1

  • java判断一个文件是否为二进制文件的方法

    本文实例讲述了java判断一个文件是否为二进制文件的方法.分享给大家供大家参考.具体如下: public static boolean isBinary(File file) { boolean isBinary = false; try { FileInputStream fin = new FileInputStream(file); long len = file.length(); for (int j = 0; j < (int) len; j++) { int t = fin.rea

  • JAVA中读取文件(二进制,字符)内容的几种方法总结

    JAVA中读取文件内容的方法有很多,比如按字节读取文件内容,按字符读取文件内容,按行读取文件内容,随机读取文件内容等方法,本文就以上方法的具体实现给出代码,需要的可以直接复制使用 public class ReadFromFile { /** * 以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件. */ public static void readFileByBytes(String fileName) { File file = new File(fileName); In

  • java实现插入mysql二进制文件,blob类型,遇到问题及解决办法

    首先是数据库建立要准备的: 我们要把放置二进制字段设置为Blob类型,根据文件的大小选择合适的Blob类型,一下是各个Blob类型所能容纳二进制文件的大小 MySQL的四种BLOB类型 类型 大小(单位:字节) TinyBlob 最大 255 Blob 最大 65K MediumBlob 最大 16M LongBlob 最大 4G 一下是具体操作代码: 复制代码 代码如下: /** * * 把二进制文件(该二进制文件可以是本地硬盘路径,也可以是一个网络路径)存入数据库 * create date

  • Java数据结构及算法实例:快速计算二进制数中1的个数(Fast Bit Counting)

    /** * 快速计算二进制数中1的个数(Fast Bit Counting) * 该算法的思想如下: * 每次将该数与该数减一后的数值相与,从而将最右边的一位1消掉 * 直到该数为0 * 中间循环的次数即为其中1的个数 * 例如给定"10100",减一后为"10011",相与为"10000",这样就消掉最右边的1 * Sparse Ones and Dense Ones were first described by Peter Wegner i

  • java中实现递归计算二进制表示中1的个数

    借助Java语言,运用递归算法计算整数N的二进制表示中1的个数 /*use the recursive algorithme to calculate * the number of "1" in the binary expression * of an Integer N. * Note:if N is an odd, then * the result is the result of N/2 plus 1. * And the program use the bit opera

  • Java解析word,获取文档中图片位置的方法

    前言(背景介绍): Apache POI是Apache基金会下一个开源的项目,用来处理office系列的文档,能够创建和解析word.excel.ppt格式的文档. 其中对word文档的处理有两个技术,分别是HWPF(.doc)和XWPF(.docx).如果你对这两个技术熟悉的话,就应该能明白使用java解析word文档的痛楚所在. 其中两个最大的问题在于: 第一是这两个类并没有统一的父类和接口(隔壁的XSSF和HSSF投过来鄙视的眼光),所以没法进行同一格式的接口式编程: 第二是官方API中并

  • C#中图片、二进制与字符串的相互转换方法

    本文实例讲述了C#中图片.二进制与字符串的相互转换方法.分享给大家供大家参考,具体如下: protected void Button1_Click(object sender, EventArgs e) { //图片转二进制 byte[] imageByte = GetPictureData(Server.MapPath("./uploadfile/111.png")); //二进制转换成字符串 string picStr = Convert.ToBase64String(imageB

  • java中处理socket通信过程中粘包的情况

    这两天学习了java中处理socket通信过程中粘包的情况,而且很重要,所以,今天添加一点小笔记. 处理粘包程序是客户端的接受消息线程: 客户端: import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.Reader; import java.net.Socket; impo

  • Linux中别名与二进制的使用教程

    本文介绍的是关于Linux中别名与二进制使用的相关内容,分享出来给大家参考,下面来看看详细的介绍: 二进制 一般二进制这个名词听上去高深莫测,然而当你了解它之后其实并不复杂,在计算机里处理数据一般都是由二进制处理. 平时我们计数都是以10为进制,比如平时数数:1.2.3.4.5.6.7.8.9,数到10时就会导致个位变成0,十位变成了1,因为9+1要向十位进一,十进制意味着数字的每一位最小为0,最大为9.同理,二进制意味着数字的每一位最小为0,最大为1,十进制的2在二进制如何表示?1+1意味着要

  • java异步写日志到文件中实现代码

    java异步写日志到文件中详解 实现代码: package com.tydic.ESUtil; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.util.Properties; public class LogWriter { // 日志的配置文件 publi

  • C++求1到n中1出现的次数以及数的二进制表示中1的个数

    在从 1 到 n 的正数中 1 出现的次数 题目: 输入一个整数 n,求从 1 到 n 这 n 个整数的十进制表示中 1 出现的次数. 例如输入 12,从 1 到 12 这些整数中包含 1  的数字有 1, 10, 1 1 和 12, 1 一共出现了 5 次 代码实现(GCC编译通过): #include "stdio.h" #include "stdlib.h" int count1(int n); int count2(int n); int main(void

  • 基于Java代码实现数字在数组中出现次数超过一半

    下文通过几种方法给大家介绍java数组数字出现次数,具体内容如下所示: 方法一: 数组排序,然后中间值肯定是要查找的值. 排序最小的时间复杂度(快速排序)O(NlogN),加上遍历. 方法二: 使用散列表的方式,也就是统计每个数组出现的次数,输出出现次数大于数组长度的数字. 方法三: 出现的次数超过数组长度的一半,表明这个数字出现的次数比其他数出现的次数的总和还多. 考虑每次删除两个不同的数,那么在剩下的数中,出现的次数仍然超过总数的一般,不断重复该过程,排除掉其他的数,最终找到那个出现次数超过

  • python中print()函数的“,”与java中System.out.print()函数中的“+”功能详解

    python中的print()函数和java中的System.out.print()函数都有着打印字符串的功能. python中: print("hello,world!") 输出结果为:hello,world! java中: System.out.print("hello,world!"); 输出结果为:hello,world! 我们可以看到,这两个函数的用法是一样的 print()函数还有这种用法: print("1+1=",1+1) 输出结

  • java字符串遍历以及统计字符串中各类字符

    本文实例为大家分享了java字符串遍历,以及java统计字符串中各类字符的具体代码,供大家参考,具体内容如下 1.需求:获取字符串中的每一个字符 分析: A:如何能够拿到每一个字符呢?   char charAt(int index) B:我怎么知道字符到底有多少个呢? int length() public class StringTest { public static void main(String[] args) { // 定义字符串 String s = "helloworld&qu

随机推荐