(1)P1143 进制转换
java对进制转换有非常好的API,可以实现无限长度的任意进制转换。
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
sc.nextLine();
String s=sc.nextLine();
int m=sc.nextInt();
System.out.println(new BigInteger(s,n).toString(m).toUpperCase());
}
}
(2)P1469 找筷子
这题如果知道二进制的知识,这道题没有难度。对每个数进行异或运算时,总会留下那个落单的数字。不过这题很恶心,只给了4M的内存,它本意是为了防止用桶排序的方法来做这道题,但它没有考虑java根本不可能在4M内存里做出来。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int res=sc.nextInt();
for(int i=1;i<n;i++) {
res^=sc.nextInt();
}
System.out.println(res);
}
}
(3)P1100 高低位交换
这题很考察对二进制的理解。把高位的16位移到低位,我们可以先把n右移16位,这样高位直接到低位了,而低位直接因为小于0而去掉了。然后我们再把低位的数字右移16位,我们通过取模的方法可以很容易拿到低位。最后我们把两次转换后的数字相加就得到了新的数字。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
long n=sc.nextInt();
long x=(n>>16)+((n%65536)<<16);
System.out.println(x);
}
}
(4)