首页 > 试题广场 >

二进制不同位数

[编程题]二进制不同位数
  • 热度指数:6582 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}给定两个正整数 mn。将它们分别写成二进制串(不含前导 \texttt{0}),从最低位对齐后进行比较。请计算在所有对应位上二进制数字不同的位数,记为 f(m,n)

\hspace{15pt}更形式化地,设 x = m \operatorname{xor} n,则 f(m,n) 等于 x 的二进制表示中 \texttt{1} 的个数。

输入描述:
\hspace{15pt}在一行上输入两个整数 m,n\left(1\leqq m,n\leqq 10^9\right),表示需要比较的两个正整数。


输出描述:
\hspace{15pt}在一行上输出一个整数,表示 mn 的二进制表示中不同的位数 f(m,n)
示例1

输入

15 8

输出

3

说明

\hspace{15pt}在这个样例中,m=15 的二进制为 \left(1111\right)_2n=8 的二进制为 \left(1000\right)_2
\hspace{15pt}从最低位对齐后比较四个二进制位,有 3 个位置上的数字不同,因此答案为 3
示例2

输入

7 10

输出

3

说明

\hspace{15pt}在这个样例中,m=7 的二进制为 \left(111\right)_2n=10 的二进制为 \left(1010\right)_2
\hspace{15pt}补齐后比较四个二进制位:
\hspace{23pt}\bullet\,1 位(最低位):1 \neq 0
\hspace{23pt}\bullet\,2 位:1 = 1
\hspace{23pt}\bullet\,3 位:1 \neq 0
\hspace{23pt}\bullet\,4 位:0 \neq 1
\hspace{15pt}共有 3 个位置不同,故答案为 3
头像 丨阿伟丨
发表于 2025-08-28 15:39:30
题目链接 二进制不同位数 题目描述 给定两个正整数 和 。将它们分别写成二进制串(不含前导 0),从最低位对齐后进行比较。请计算在所有对应位上二进制数字不同的位数,记为 。 更形式化地,设 表示 和 的按位异或(XOR),则 等于 的二进制表示中 1 的个数。 解题思路 这个问题要求我们 展开全文
头像 pandaC222
发表于 2026-01-22 00:14:09
很水的一道题,异或后可以通过右移位&1来统计个数,同样的也可以用c++内置函数实现(懒人做法))__builtin_popcountll(m^n)直接统计二进制1的个数(我是懒人) #include<bits/stdc++.h> using namespace std; #def 展开全文
头像 白伟仝
发表于 2020-06-27 16:49:33
用toBinaryString转成二进制字符串,挨个比较就行了: import java.util.*; public class Main{ public static void main(String[] args) { Scanner sc = new Scanner( 展开全文
头像 何成HN
发表于 2025-10-25 17:51:03
m, n = map(int,input().split()) print(bin(m^n).count('1'))#求异或,转为二进制,求1的数量,输出1的数量
头像 我是芭芭拉的狗
发表于 2026-01-07 11:54:59
n, m = map(int,input().split()) s = 0 while n > 0 or m > 0: if n % 2 != m % 2: s += 1 n //= 2 m //= 2 print(s)
头像 bing糖雪狸
发表于 2026-01-22 22:56:29
题目信息平台:牛客题目:二进制不同位数难度:简单题目链接题目描述给定两个整数 m、n,计算它们二进制表示中不同位的数量。初步思路不同位的数量等价于 m 与 n 的异或结果中 1 的个数。用 x = m ^ n 得到所有不同位。通过 x &= x - 1 每次消去最低位的 1,并计数。 示例 展开全文
头像 lahm66
发表于 2025-09-06 10:05:50
根据题目意思 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in=new Scanner(System.in); 展开全文
头像 李林臻
发表于 2026-03-04 20:12:38
#include<iostream> #include<vector> #include<string> #include<algorithm> //用暴力,但是要处理一个小细节 //在转换成2进制时候,因为只要比较不同,为了节约时间,只求2进制的逆序 展开全文
头像 BeauWill
发表于 2026-01-22 00:30:23
计算m和n二进制表示上的不同位数,等价于计算m异或n的值中二进制'1'的个数C++版本 #include <iostream> int main(){ std::ios::sync_with_stdio(false); std::cin.tie(nullptr); std: 展开全文
头像 麦兜兜666
发表于 2026-01-22 10:05:47
#include <iostream> using namespace std; int lowbit(int x) { return x & -x; } int main() { int m, n; cin >> m >> 展开全文

问题信息

上传者:小小
难度:
44条回答 5914浏览

热门推荐

通过挑战的用户

查看代码
二进制不同位数