首页 > 试题广场 >

bit位数

[编程题]bit位数
  • 热度指数:2701 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
两个整数 m 和 n 的二进制表达中有多少个位(bit)不同?

数据范围:

输入描述:
一行中给定两个数字


输出描述:
输出这两个数字中bit不同的个数
示例1

输入

15 8

输出

3

说明

15的二进制表示中后四位是 1111 , 3的二进制表示中后四位是 0011,因此有两位不同 
Java最简单的写法
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            System.out.println(Integer.bitCount(sc.nextInt()^sc.nextInt()));
        }
    }
}

发表于 2020-06-13 00:13:51 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int m = sc.nextInt();
        int n = sc.nextInt();
        int sum=0;
        String ml = Integer.toBinaryString(m);
        String nl = Integer.toBinaryString(n);
        int q = new StringBuffer(ml).length() > new StringBuffer(nl).length() ? new StringBuffer(ml).length():new StringBuffer(nl).length();
        char[] mArr = new char[q];
        char[] nArr = new char[q];
        for(int i=0;i<q;i++){
            mArr[i]=nArr[i]='0';
        }
        
        for(int i=q-1,j=ml.length()-1;i>=0 && j>=0;i--,j--){
            mArr[i] = ml.charAt(j);
        }
        
        for(int i=q-1,j=nl.length()-1;i>=0 && j>=0 ;i--,j--){
            nArr[i] =nl.charAt(j);
        }
        
//        for(int i =0;i<q;i++){
//            System.out.print(mArr[i]+" ");
//        }
//        System.out.println();
//        for(int i =0;i<q;i++){
//            System.out.print(nArr[i]+" ");
//        }
//        
        for(int i=0;i<q;i++){
            if(mArr[i]!=nArr[i]){
                sum++;
            }
        }
        System.out.println(sum);
    }
}


常规的逻辑思维问题。理清思路,不难。
发表于 2019-05-24 17:26:16 回复(0)

问题信息

上传者:小小
难度:
3条回答 3641浏览

热门推荐

通过挑战的用户

查看代码