lintcode----将整数A转换为B

来源:互联网 发布:人肉 知乎 编辑:程序博客网 时间:2024/06/04 17:43

原始思路:将a和b转换为对应的二进制数,位数不同,用0补齐,然后对应位比较,最终只能解决两个是正数的情况代码如下:


int bitSwapRequired(int a, int b) {// write your code herestring ta;string tb;int res=0;while(a){int tema=a%2;ta+=to_string(long double (tema));a/=2;}while(b){int temb=b%2;tb+=to_string(long double (temb));b/=2;}if(ta.length()>tb.length()){int num=ta.length()-tb.length();for(int i=0;i<num;i++){tb=tb+'0';}}else if(ta.length()<tb.length()){int x=tb.length()-ta.length();for(int i=0;i<x;i++){ta=ta+'0';}}for(int j=0;j<tb.length();j++){if(ta[j]!=tb[j])res++;}return res;}


正确&简单思路:a,b的每一位与每个2次幂位相与,之后再做异或即可判断出,该位是否一样,代码如下:



 int bitSwapRequired(int a, int b)  { // write your code here int count=0; int flag=1; int i=0,j=0; while(flag) { i=a&flag; j=b&flag; if(i^j) count++; flag=flag<<1; } return count; }




0 0