进制+异或

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);
		
	

以上是关于进制+异或的主要内容,如果未能解决你的问题,请参考以下文章

写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换

写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换

写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换

BZOJ 3652大新闻 数位dp+期望概率dp

or、xor、and、not的定义

BZOJ3329:Xorequ——题解