一、题目描述
异或运算是常见的二进制运算,给出两个n位二进制数a,b。a异或b的运算依次考虑二进制的每一位,若这一位相同,那么这一位的异或结果就是0,不同就是1。
例如a=1100, b=0100。执行a异或b的运算,a的最高位是1,b的最高位是0,两个数字不同所以最高位异或结果是1;a和b次高位都是1,所以次高位异或为0;最后两位它们都是0,所以异或结果也都是0。那么a异或b的答案就是1000。
现在输入两个n位二进制数,输出它们异或结果的十进制答案。上述样例中异或的二进制结果为1000,转化成十进制就是8。

二、输入
输入有三行,第一行一个数n(1<=n<=20),接下来两行有两个n位二进制数。输入的二进制数可能有前导零。
样例输入
4
1100
0100

三、输出
输出一个数,异或结果的十进制数值,不要输出前导零。
样例输出
8
时间限制
C/C++语言:2000MS其它语言:4000MS
内存限制
C/C++语言:65536KB其它语言:589824KB

四、总结
总的来说,这道题目算是很简单的了。自己看了官方给的答案:先把二进制字符串转为十进制,再使用^运算符得出结果。
但是我觉得这并没有体现描述中的内容,如果直接使用运算符那这道题就是单纯的考进制的转换了。
所以我个人当时把异或部分按照定义实现而没有使用运算符直接计算,然后再把异或完的结果转为十进制。
不过比较遗憾的是,写完后发现通过率只有百分之十,囧!就使劲想着是不是有什么特殊情况没有考虑,比如输入的字符串包不包含前导零,字符串的长度是否超出限制等等,改完后通过率为百分之二十,最后考完自己检查了代码才发现竟然是进制转换那里写错了….渣渣!
下面是自己整理后的代码,感觉很复杂,有不正之处,请多指教!

import java.util.Scanner;public class xor {public static void main(String[] args){//输入数据Scanner sc = new Scanner(System.in);  int n = sc.nextInt();String num1 = sc.next();String num2 = sc.next();//补充前导零StringBuilder  zero = new StringBuilder();int num = Math.abs(num1.length() - num2.length());int max = num1.length() > num2.length()? num1.length():num2.length();for(int a = num ;a > 0;a--)zero.append(0);if(num != 0 && max == num1.length())num2 = zero.toString() + num2;elsenum1 = zero.toString() + num1;//长度是否符合要求if(num1.length() > 20)num1 = num1.substring(0, 20);if(num2.length() > 20)num1 = num2.substring(0, 20);//异或实现StringBuilder result = new StringBuilder();for(int i = 0;i < num1.length(); i++){if(num1.charAt(i) != num2.charAt(i))result.append(1);elseresult.append(0);}//输出异或结果的十进制System.out.println(getNum(result.toString()));}public static int getNum(String bin) {int sum = 0;int len = bin.length();for(int i = 0;i < len; i++){int k =bin.charAt(i) - 48;//当时写成了int j = len - 1导致通过率只有百分之十for(int j= len-1-i;j > 0 && k > 0;j--)k = k * 2;sum += k;}return sum;}
}

五、扩展
感觉自己写方法好笨好繁杂,在网上发现了一个简洁的版本学习一下

public static void main(String[] args) {Scanner in= new Scanner(System.in);int N = in.nextInt();String str1 = in.next();String str2 = in.next();int[] C = new int[N];int result = 0;char[] A = str1.toCharArray();char[] B = str2.toCharArray();for ( int i = 0 ; i < N ; i++){C[i] = (A[i] != B[i])? 1:0;result = result * 2 + C[i] ;}System.out.println(result);in.close();}

这就是差距啊!

2017京东实习生笔试题之异或相关推荐

  1. 2017京东实习生笔试题(一)

    下面程序的返回值是什么? #include "stdafx.h" #include<iostream> using namespace std; int func(in ...

  2. 2017阿里巴巴实习生笔试题之扑克牌问题

    晚上刚参加2017阿里巴巴实习生的笔试,笔试分为两个部分,第一部分是选择题,第二部分是在线编程题.一做选择题感觉就被放了一个大招,自己则是一脸懵懵的状态:数据库,概率,排列组合,C++,Java,数据 ...

  3. 2017京东校招笔试题

    题目内容来自牛客网https://www.nowcoder.com/ta/2017test 1.进制均值 题目描述 尽管是一个CS专业的学生,小B的数学基础很好并对数值计算有着特别的兴趣,喜欢用计算机 ...

  4. 困兽之斗--乐视2017暑期实习生笔试题(二)

    经过深思熟虑之后,小贱君打算去M国闯一闯,那是一个古老的东方国度,传说有很多高阶魔法师,他想成为一名伟大的魔法师,将来征服星辰大海. 经过千辛万苦,小贱君终于来到了M国,不幸的是刚进城门小贱君就被M国 ...

  5. 乐视2017暑期实习生笔试题(二)

    第二题: 传送门 [编程题] 困兽之斗 经过深思熟虑之后,小贱君打算去M国闯一闯,那是一个古老的东方国度,传说有很多高阶魔法师,他想成为一名伟大的魔法师,将来征服星辰大海. 经过千辛万苦,小贱君终于来 ...

  6. 2017华为实习生笔试题汇总

    1.字符串大小写转换:写出一个程序,输入一个字符串,然后输出大写转换为小写之后的字符串.不在字母范围内的字符,需丢弃.例如1:输入:ABC,输出:abc:例如2:输入:AbC输出:abc. 第一道题很 ...

  7. 乐视2017暑期实习生笔试题(一)

    最近为应对秋招,又开始刷题,乐视的三大编程题,题目真心长 /* 卢卡斯的驱逐者大军已经来到了赫柏的卡诺萨城,赫柏终于下定决心,集结了大军,与驱逐者全面开战. 卢卡斯的手下有6名天之驱逐者,这6名天之驱 ...

  8. 阿里巴巴2017实习生笔试题+JAVA工程师能力评估部分题目

    阿里巴巴2017实习生笔试题 1.由权值分别为1.12.13.4.8的叶子节点生成一颗哈夫曼树,它的带权路径长度为() 2.进程间的通信方式 # 管道( pipe ):管道是一种半双工的通信方式,数据 ...

  9. 【求职】阿里巴巴 2017 实习生笔试题(一)

    阿里巴巴 2017 实习生笔试题(一) 一.单选题 1.关于c++的 inline 关键字,以下说法正确的是 ( ) A. 使用 inline 关键字的函数会被编译器在调用处展开 B. 头文件中可以包 ...

最新文章

  1. Google图嵌入工业界最新大招,高效解决训练大规模深度图卷积神经网络问题
  2. Pyhton学习——Day3
  3. XCTF-Reverse:python-trade
  4. RestTemplate技术预研-认识RestTemplate
  5. DoraCMS 源码知识点备注
  6. java写exe程序实例_2012软考软件设计师辅导:利用JAVA执行本地EXE文件
  7. 实训09.09:简单的彩票系统(自选多注)
  8. C++学习之路 | PTA乙级—— 1071 小赌怡情 (15 分)(精简)
  9. adfs服务器获取信息失败,在ADFS服务器上SAML LogOutRequest处理失败
  10. redis复制原理和应用
  11. window环境配置虚拟主机
  12. 15 年老程序员自述:8 个影响我职业生涯的重要技能
  13. git tag 的基本用法
  14. modscan32为主设备
  15. Java项目——细胞自动机
  16. 测试显卡专业性能软件,如何测试显卡的性能?几款的显卡性能检测软件推荐
  17. 五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT)
  18. css设置字体的位置
  19. metersphere平台架构解析及二次开发
  20. c语言is函数,C ++中的is_trivial函数

热门文章

  1. 浏览器F12进行Web程序调试
  2. 2021-11-23----韩顺平Java入门第十四天
  3. 还在为 520 发愁吗?教你用 Python 写个表白神器
  4. javascript实现繁体简体转换
  5. 在UE5中创建一个受战锤启发的角色
  6. 2019/9/6工学结合周记
  7. 梯度下降学习率的设定策略
  8. 常见的GC算法(GC的背景与原理)
  9. 绝地求生6月23号服务器维护到几点,绝地求生6月23号更新内容汇总 维护公告信息一览...
  10. 智慧城市(大数据,物联网,云计算之应用)