问题描述:
异或运算是常见的二进制运算,给出两个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目录下建立文件也可)。