链接:https://www.nowcoder.com/questionTerminal/30c1674ad5694b3f8f0bc2de6f005490
来源:牛客网
给定两个32位整数n和m,同时给定i和j,将m的二进制数位插入到n的二进制的第j到第i位,保证n的第j到第i位均为零,且m的二进制位数小于等于i-j+1,其中二进制的位数从0开始由低到高。
测试样例: 1024,19,2,6 返回:1100
import java.util.*;
public class BinInsert {
private int toint(String string){
char[] chars=string.toCharArray();
int ans=0;
for (int k=string.length()-1;k>=0;k--){
ans= ans+(chars[k]-'0')* pow(2,32-k-1);
}
return ans;
}
public static int binInsert(int n, int m, int j, int i) {
// write code here
String str1=toFullBinaryString(n);
String str2=toFullBinaryString(m);
String string="";
//字符串拼接,注意下标的计算,为了方便计算,从左往右数,下标0开始
string=str1.substring(0,32-i-1)+//取n的第0位~第(32-i-1)位+
str2.substring(32-i+j-1,32)+ //取m的第(32-i-1+j)位~第31位
str1.substring(32-j,32);//n的后j位
char[] chars=string.toCharArray();
int ans=0;
for (int k=string.length()-1;k>=0;k--){
ans= ans+(chars[k]-'0')* pow(2,32-k-1);
}
return ans;
}
private static int pow(int a,int b){
int res=1;
for (int i = 0; i < b; i++) {
res*=a;
}
return res;
}
public static String toFullBinaryString(int num)//将整数num转化为32位的二进制数
{
char[] chs = new char[Integer.SIZE];
for (int i = 0; i < Integer.SIZE; i++)
{
chs[Integer.SIZE - 1 - i] = (char) (((num >> i) & 1) + '0');
}
return new String(chs);
}
}