php实现2017年京东编程题之异或问题

问题描述:

  异或运算是常见的二进制运算,给出两个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。

测试用例:

4

1100

0011

out:15

代码:

 

//打开stdin流
$input = fopen("php://stdin","r");
//获取二进制位数)
$n = trim(fgets($input));
while($n){
  //获取第一、第二个二进制数,为避免空格的输入,去掉获取的值的前后空格
  $str1 = trim(fgets($input));
  $str2 = trim(fgets($input));
  //先将结果赋空
  $strout = '';
  //进行异或运算
  for($i=0;$i<$n;$i++){
    $strout.= ((int)$str1[$i])^((int)$str2[$i]);
  }
  ltrim($strout,1);
  //将异或之后的结果转换为十进制数并输出
  echo bindec($strout)."\n";
  $n = trim(fgets($input));
}
//关闭文件流
fclose($input);

调试:

win+r,输入cmd打开dos窗口,进入包含php.exe的目录下,如图所示:(注意:jingdong.php是我自己写好的php文件,拷贝到php目录下,或者用编译器直接在php目录下建立文件也可)。

 

 

posted @ 2017-04-15 15:58  码上的日子  阅读(363)  评论(0编辑  收藏  举报