进制+异或
Posted 猪八戒1.0
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进制+异或相关的知识,希望对你有一定的参考价值。
一.调用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);
以上是关于进制+异或的主要内容,如果未能解决你的问题,请参考以下文章