题目一:*~求最大连续bit数
题目:
求一个byte数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1
【解题思路】:根据位运算,获取每一位的二进制值。获取第i位的值: (n >> i) & 1。如果1连续,则计数累加,如果不连续,则从0开始计
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner scan=new Scanner(System.in);
while(scan.hasNext()){
int n=scan.nextInt();
int count=0;
int modCount=0;
while(n!=0){
if((n&1)==1){
count++;
modCount=Math.max(count,modCount);
}else{
count=0;
}
n>>=1;
}
System.out.println(modCount);
}
}
}
题目二:*~二进制插入
题目描述
给定两个32位整数n和m,同时给定i和j,将m的二进制数位插入到n的二进制的第j到第i位,保证n的第j到第i位均为零,且m的二进制位数小于等于i-j+1,其中二进制的位数从0开始由低到高。
题目解析】:本题考察位运算
题解:
m右移j位,然后在与n相或
import java.util.*;
public class BinInsert {
public int binInsert(int n, int m, int j, int i) {
m<<=j;
return m|n;
}
}
题目三:*~查找组成一个偶数最接近的两个素数
题目描述 :
任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对。
本题含有多组样例输入。
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner scan=new Scanner(System.in);
while(scan.hasNext()){
int n=scan.nextInt();
int half=n/2;
for(int i=half;i>0;i--){
if(isPrime(i)&&isPrime(n-i)){
System.out.println(i);
System.out.println(n-i);
break;
}
}
}
}
public static boolean isPrime(int m){
for(int i=2;i*i<=m;i++){
if(m%i==0){
return false;
}
}
return true;
}
}