【漫步刷题路】- 找到两个二进制序列不同位有几位

简介: 找到两个二进制序列不同位有几位

题目要求

找到两个二进制序列不同位有几位:

方法1:遍历两个二进制序列,每一位比较是否相等

int count_difer_bit(int n1, int n2)
{
    int  count = 0;
    int i = 0;
    //4个字节:32位,所以比较次数:32次
    for (i = 0; i < 32; i++)
    {
        //两个数的二进制序列对应比特位与上1之后进行比较
        if ( ( (n1 >> i) & 1 ) != ((n2 >> i) & 1) )
        {
            count++;
        }
    }
    return count;
}
int main()
{
    int n = 0;
    int m = 0;
    scanf("%d %d", &n, &m);
    int ret = count_difer_bit(n,m);
    printf("%d %d二进制序列中有%d位不同\n", n, m, ret);
    return 0;
}

方法2:使用异或

异或:相同为0,相异为1

把要求的两个二进制序列异或起来,看异或后的结果有几个1,则原来的两个数就有几个二进制序列不同

//得到二进制序列有多少个1
int Numberf1(int n)
{
    int count = 0;
    while (n)
    {
        n = n & (n - 1);
        count++;
    }
    return count;
}
//两个二进制比较
int count_diff_bit(int n1, int n2)
{
    int count = 0;
    int t = n1 ^ n2;  //n1 n2异或
    count = Numberf1(t);
    return count;
}
int main()
{
    int n = 0;
    int m = 0;
    scanf("%d %d", &n, &m);
    int ret = count_diff_bit(n,m);
    printf("%d %d二进制序列中有%d位不同\n", n, m, ret);
    return 0;
}
相关文章
截断数组(蓝桥杯每日一题)
截断数组(蓝桥杯每日一题)
52 0
代码随想录算法训练营第六天 | LeetCode 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
代码随想录算法训练营第六天 | LeetCode 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
75 0
代码随想录算法训练营第六天 | LeetCode 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
代码随想录算法训练营第六天| 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和
代码随想录算法训练营第六天| 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和
《蓝桥杯每日一题》 前缀和·Acwing 3956. 截断数组
《蓝桥杯每日一题》 前缀和·Acwing 3956. 截断数组
79 0
算法创作 | 两数相加问题解决方法
算法创作 | 两数相加问题解决方法
86 0
【基础算法】浅浅刷个小题 # 找不同 # 字符串中的单词数 # 重新排列字符串 #
【基础算法】浅浅刷个小题 # 找不同 # 字符串中的单词数 # 重新排列字符串 #
【五一创作】AcWing——凑数(二进制中1的个数)
【五一创作】AcWing——凑数(二进制中1的个数)
95 0
LeetCode每日一题——1582. 二进制矩阵中的特殊位置
给你一个大小为 rows x cols 的矩阵 mat,其中 mat[i][j] 是 0 或 1,请返回 矩阵 mat 中特殊位置的数目 。
71 0
重温算法之回文子串
感觉做算法题以来,看到这种类似的题型就是循环,然后匹配,实际上时间复杂度这些没有去关注,比如这一题,题友的做法就少了一层循环,时间复杂度肯定比我的小,还是老生常谈的问题,慢慢积累吧,算法这事急不得。
112 0
重温算法之回文子串