1.来源
https://www.nowcoder.com/questionTerminal/30c1674ad5694b3f8f0bc2de6f005490?toCommentId=145988
2.题目
给定两个32位整数n和m,同时给定i和j,将m的二进制数位插入到n的二进制的第j到第i位,保证n的第j到第i位均为零,且m的二进制位数小于等于i-j+1,其中二进制的位数从0开始由低到高。
测试样例:
1024,19,2,6
返回:1100
3.代码
方法1:
class BinInsert {
public:
int binInsert(int n, int m, int j, int i) {
//根据测试用例可以看出:只要让m向左移动j位,就可以和n的j位对上
//然后两数相或(同时为0时为0)->其实就是将m插入到n
// m左移j位
m = m<<j;
return (n | m);
}
};
方法2:
class BinInsert {
public:
int binInsert(int n, int m, int j, int i) {
// write code here
//注意:二进制从低位到高位并且以0开始,说明存入数组逆置数字之后没有什么改变
//思路:将两个数的二进制位取出来,分别存入两个vector中
//然后用第二个替换掉第一个相应的位置的数据,输出第一个vector
vector<int> v1,v2;
int result=0;//保存十进制结果
while(n)
{
v1.push_back(n&1);
n=n>>1;
}
while(m)
{
v2.push_back(m&1);
m=m>>1;
}
for(int a=0;a<v2.size();a++)
{
//将m插入到n的第j到第i位
v1[j]=v2[a];
j++;
}
//将二进制数变为十进制
for(int b=0;b<v1.size();b++)
{
result+=v1[b]*pow(2,b);//pow函数用来计算x的y次幂
}
return result;
}
};