首页 > 试题广场 >

懂二进制

[编程题]懂二进制
  • 热度指数:3867 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
世界上有10种人,一种懂二进制,一种不懂。那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么?
示例1

输入

3,5

输出

2

说明

3的二进制为11,5的二进制为101,总共有2位不同 
示例2

输入

1999,2299

输出

7
为什么这里正确答案是22而不是23位?有没有懂的兄弟可以解释一下的
编辑于 2024-03-21 17:14:45 回复(0)
return Integer.toBinaryString(m^n).replaceAll("0","").length();

发表于 2024-03-17 15:04:49 回复(0)
import java.util.*;
import java.lang.Math;

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param m int整型
     * @param n int整型
     * @return int整型
     */
    public int countBitDiff (int m, int n) {
        long num = 0;
        long x = 0;
        String twoM = String.format("%32s", Integer.toBinaryString(m)).replace(' ',
                      '0');
        String twoN = String.format("%32s", Integer.toBinaryString(n)).replace(' ',
                      '0');

        long lengthM = twoM.length();
        long lengthN = twoN.length();
        long lengthMin = Math.min(lengthM, lengthN);
        for (int i = 0; i < lengthMin; i++) {
            if (twoM.charAt(i) != twoN.charAt(i)) {
                num++;
            }
        }
        return (int)(num + Math.abs(lengthM - lengthN));
    }
}

发表于 2023-03-30 20:47:18 回复(0)
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param m int整型 
     * @param n int整型 
     * @return int整型
     */
    public int countBitDiff (int m, int n) {
        // write code here

        // 1. 异或操作,获取 m和n 都有哪些位是不同的
        int temp = m ^ n;
        int res = 0;
        // 2. 获取temp上有多少个1,有多少个1,就有多少个不同
        while(temp>0){
            // 将temp二进制,先右移1位,再左移1位,
            int tt = temp;
            temp = temp>>1;
            // 如果temp右移前末尾为1,两次移动结果必然不一致
            if(tt != temp<<1){
                res++;
            }
        }


        return res;
    }
}
发表于 2023-02-28 19:20:16 回复(0)
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param m int整型 
     * @param n int整型 
     * @return int整型
     */
    public int countBitDiff (int m, int n) {
        // write code here
        int c = 0;//不同位的个数
        int t = m ^ n;//异或:相同为0,相异为1,所以异或完之后,有几个1就有几个不同位
        //求1的个数的妙招
        //t = t & (t - 1)
        while(t != 0) {
            t = t & (t - 1);
            c++;
        }
        return c;
    }
}


发表于 2022-06-25 20:46:18 回复(0)
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param m int整型 
     * @param n int整型 
     * @return int整型
     */
    public int countBitDiff (int m, int n) {
        // write code here
        int c = m ^ n;
        int k = 0;
        while(c != 0){
            if((c & 1) == 1){
                k++;
            }
            c = c >> 1;
        }
        return k;
    }
}

发表于 2022-04-26 19:57:42 回复(0)
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param m int整型 
     * @param n int整型 
     * @return int整型
     */
    public int countBitDiff(int m, int n) {
        // write code here
        return Integer.bitCount(m ^ n);
    }
}


发表于 2022-03-20 17:21:31 回复(1)

问题信息

上传者:牛客301499号
难度:
9条回答 1566浏览

热门推荐

通过挑战的用户

查看代码