题目背景
异或即为xor,符号为^
0^0=0
1^0=1
0^1=1
0^0=0
5=101
3=011
5^3=110
题目描述
利用异或和对输入的整数进行加密解密输出,用户输入一个二进制整数x(1≤x≤2
19),然后输入一个二进制整数y(1≤y≤2 19)作为密钥,输出加密后的二进制整数(即x xor y)
输入格式
输入共一行,两个整数,x,y
输出格式
输出共一行,一个整数z,表示x^y=z
输入输出样例
输入 #1 复制
110011
10110
输出 #1 复制
100101
说明/提示
1≤x≤2 19
1≤y≤2 19
#include<iostream>
#include<math.h>
using namespace std;
long long binary_int(long long n){
long long sum = 0,m=1;
while(n > 0){
sum += m*(n%10);
m *= 2;
n /= 10;
}
return sum;
}
long long int_binary(long long n){
long long sum = 0,m = 1;
while(n > 0){
sum += m * (n % 2);
n /= 2;
m *= 10;
}
return sum;
}
int main(){
long long a,b,c,m,n;
cin>>a>>b;
m = binary_int(a);
n = binary_int(b);
c = m^n;
cout<<int_binary(c);
return 0;
}
java题解:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
long a,b,c,m,n;
a = scanner.nextLong();
b = scanner.nextLong();
m = binary_int(a);
n = binary_int(b);
c = m^n;
System.out.println(int_binary(c));
}
public static long binary_int(long n){
long sum = 0,m=1;
while(n > 0){
sum += m * (n % 10);
m *= 2;
n /= 10;
}
return sum;
}
public static long int_binary(long n){
long sum = 0,m=1;
while(n > 0){
sum += m*(n%2);
m *= 10;
n /= 2;
}
return sum;
}
}