首页 > 试题广场 >

整数转化

[编程题]整数转化
  • 热度指数:8886 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

给定两个整数AB。编写函数,返回将整数A转变成整数B所需要改变的数位个数。

测试样例:
10,5
返回:4
推荐
XD头像 XD
思路:A 需要变换 多少位 才能得到B,位变换无非就是0-1,1-0的过程所以,A和B之间 有多少的不同的0-1,1-0的变换就有需要多少位的变换,由于异或操作是 相同为0 不同为1 也即1-0,0-1的结果为1,也就是转换成A^B之后 1 的个数求解;
 
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;
    }



编辑于 2015-08-18 19:44:00 回复(3)
# 返回A^B后的二进制字符串中“1”的个数
return bin(A ^ B).count('1')

发表于 2018-01-09 14:10:26 回复(0)

python三行解法:

# -*- coding:utf-8 -*-
class Transform:
    def calcCost(self, A, B):
        A=bin(A).replace("0b","").rjust(32,"0")
        B=bin(B).replace("0b","").rjust(32,"0")
        return sum(map(lambda c:A[c]!=B[c],range(32)))

一行解法:


return sum(map(lambda c:bin(A).replace("0b","").rjust(32,"0")[c]!=bin(B).replace("0b","").rjust(32,"0")[c],range(32)))
发表于 2017-10-16 12:07:15 回复(2)