zoukankan      html  css  js  c++  java
  • 位运算---整数间的转化

    此题巧妙地转为熟悉的的求一个数中1的个数,告诉我们一些看似不熟悉的题目其实认真想想可以转为化我们熟悉的题目。

    //题目描述
    //
    //编写一个函数,确定需要改变几个位,才能将整数A转变成整数B。
    //给定两个整数int A,int B。请返回需要改变的数位个数。
    //测试样例:
    //10, 5
    //返回:4
    
    
    //思路:A 需要变换 多少位 才能得到B,位变换无非就是0 - 1, 1 - 0的过程所以,A和B之间 有多少的不同的0 - 1, 1 - 0的变换就有需要多少位的变换,
    //由于异或操作是 相同为0 不同为1 也即1 - 0, 0 - 1的结果为1,也就是转换成A^B之后 1 的个数求解;--->问题转化
    
    class Transform {
    public:
        int calcCost(int A, int B) {
            // write code here
            int res = A ^ B;
            int count = 0;
            while (res != 0)
            {
                if ((res & 1) != 0)
                {
                    count++;
                }
                res >>= 1;
            }
            return count;
        }
    
        int calcCost(int A, int B) {
            // write code here
            int res = A ^ B;
            int count = 0;
            while (res != 0)
            {
                count++;
                //去掉最后一位的1 例如 1111 & (1111-1) = 1110 将最后一位1 去掉
                res &= (res - 1);
            }
            return count;
        }
    };
  • 相关阅读:
    项目架构开发:数据访问层之Cache
    微信公众号平台接口开发:菜单管理
    【软件工程】第0次个人作业
    OO第四次博客作业
    OO第三次博客作业
    OO第二次博客作业
    Java学习笔记
    SQLInjection 靶场配置
    OO第一次博客作业
    面向对象先修:Java入门
  • 原文地址:https://www.cnblogs.com/ranjiewen/p/5860264.html
Copyright © 2011-2022 走看看