题解 | #整数转化#

整数转化

http://www.nowcoder.com/practice/c7df20a5a39e4357aecc1071e7fd523c

class Transform {
public:
    int calcCost(int A, int B) {
        // write code here
        // A 和 B 异或后统计结果中的1的个数
        /*
        * 思路:A 需要变换 多少位 才能得到B,而位变换无非就是0-1,1-0的过程
        * 所以,A和B之间 有多少的不同的0-1,1-0的变换就有需要多少位的变换,
        * 也就是转换成A^B之后 1 的个数求解;
        * 由于异或操作是 相同为0 不同为1 也即1-0,0-1的结果为1,
        * 只需要A和B异或操作后,统计运算结果中1的个数即可
        */
        int temp = A ^ B;
        int counter = 0;
        while(temp > 0)
        {
            if(temp & 1 == 1) counter++;
            temp = temp >> 1;
        }
        return counter;
    }
};
全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务