京东2017笔试异或
题目描述 :
现在输入两个n位二进制数,输出它们异或结果的十进制答案。上述样例中异或的二进制结果为1000,转化成十进制就是8。
输入:
输入有三行,第一行一个数n(1<=n<=20),接下来两行有两个n位二进制数。输入的二进制数可能有前导零。
输出
输出一个数,异或结果的十进制数值,不要输出前导零。
样例输入
4
1100
0100
输入 | 样例输入 |
---|---|
输入有三行,第一行n(1<=n<=20),接下来两行有两个n位二进制数。输入的二进制数可有前导零。 | 4 1100 0100 |
输出 | 样例输出 |
异或结果的十进制数值,不要输出前导零。 | 8 |
自己写的:
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
int n ;
int sum = 0 ;
Scanner in = new Scanner(System.in);
n = in.nextInt();
String s = in.next();
//用数组将第一组二进制存起来
char p1[] = s.toCharArray() ;
s = in.next();
char p2[] = s.toCharArray() ;
//不同则进行幂运算
for (int i=0 ; i<n ; i++){
if (p1[i] != p2[i]){
sum+=Math.pow(2, n-i-1);
}
}
System.out.println(sum);
}
}
给的答案:
#include<bits/stdc++.h>
using namespace std;
char s[100];
int getnum(int n){
int ans = 0;
for(int i = 0; i < n; i++){
ans *= 2;
ans += s[i] - '0';
}
return ans;
}
int main(){
int n;
scanf("%d", &n);
scanf("%s", s);
int a = getnum(n);
scanf("%s", s);
int b = getnum(n);
printf("%d\n", a ^ b);
return 0;
}