一.调用API
String s=Integer.toString(十进制,转为0-35进制);
//R进制的字符串转为10进制数
int a=Integer.parseInt(s,R);
//把R进制的字符串封装成大数类
BigInteger b=new BigInteger(s,R);
二.求R进制下的数位和
2992这个数十进制和为22,十六进制为BB0和也为22,十二进制是1894和也是22
代码
public class Main {
public static void main(String[] args) {
System.out.println(getR(2992, 10));
System.out.println(getR(2992, 16));
System.out.println(getR(2992, 12));
}
static int getR(int num,int radix) {
int sum=0;
while(num>0) {
sum+=num%radix;
num/=radix;
}
return sum;
}
}
运行结果
三.求子集(下面用进制的方法)
如求{1,2,3,4}的子集
0000 空集
0001 1
0010 2
0011 1,2
...
1111 1,2,3,4
所以就是要找是1的就输出,而要记录是第几个输出就用到了index,开始index是0进行一次运算就加一,再输出a[index]即可
代码
public class Main {
public static void main(String[] args) {
int[] a= {1,2,3,4};
for(int i=0;i<16;i++) {
int n=i;
int index=0;
while(n>0) {
if(n%2==1) {
System.out.print(a[index]);
}
index++;
n/=2;
}
System.out.println();
}
}
}
运行结果:
为实现更好效果
代码:
public class Main {
public static void main(String[] args) {
int[] a= {1,2,3,4};
for(int i=0;i<16;i++) {
int n=i;
int index=0;
System.out.print("{");
while(n>0) {
if(n%2==1) {
if(n>2) {
System.out.print(a[index]+",");
}
else {
System.out.print(a[index]);
}
}
index++;
n/=2;
}
System.out.println("}");
}
}
}
运行结果:
三.经典使用异或
第一行输入i,第二行输入2*i-1个数,输出数中单独出现的
输入:
输出
异或相同为0不同为1
令x=0, x^1^2^3^2^1^4^4=x^1^1^2^2^4^4^3=0^0^0^0^3=0^3=3
即可得到单独出现的数
同理x^1^2^1=2
代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
int n=sc.nextInt();
int ans=0;
for(int i=0;i<2*n-1;i++) {
ans=ans^sc.nextInt();
}
System.out.println(ans);
}
}
}