赞
踩
本题是针对bit位的交换
配对交换。编写程序,交换某个整数的奇数位和偶数位,尽量使用较少的指令(也就是说,位0与位1交换,位2与位3交换,以此类推)。 示例1: 输入:num = 2(或者0b10) 输出 1 (或者 0b01) 示例2: 输入:num = 3 输出:3 提示: num的范围在[0, 2^30 - 1]之间,不会发生整数溢出。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/exchange-lcci 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
int exchangeBits(int num){ int t = num; int num_of_digits = 0; int p1=0,p2=0; int ret = 0; if(num == 0){ return 0; } while(t!=0) { t=t/2; num_of_digits++; } if((num_of_digits %2 )==1){ num_of_digits++; } int bit[num_of_digits]; int i = 0; for(i=0;i<num_of_digits;i++) bit[i]=0; t = num; p1=num_of_digits-1; while(t!=0) { int temp = t%2; if(temp==1) bit[p1]=1; else bit[p1]=0; p1--; t=t>>1; } p1=0; p2=1; while(p1<num_of_digits) { int temp = bit[p1]; bit[p1] = bit[p2]; bit[p2] = temp; p1=p1+2; p2=p2+2; } int fac = 1; p1=num_of_digits-1; while(p1>=0){ ret = ret+fac*bit[p1]; fac = fac<<1; p1--; } return ret; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。