第一道编程题,帮忙看看哪里有问题?过%0,什么鬼?
发布于 2017-04-07 21:05 2718 次浏览 0 赞 来自 我要提问  

异或

时间限制:C/C++语言 2000MS;其他语言 4000MS

内存限制:C/C++语言 65536KB;其他语言 589824KB

题目描述:

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







import java.io.IOException;

import java.util.Scanner;


public class Main {


public static void main(String[] args) throws IOException {


Scanner sc=new Scanner(System.in);

int len=sc.nextInt();

Scanner sc1=new Scanner(System.in);

String a=sc1.nextLine();

String b=sc1.nextLine();

byte [] a1= a.getBytes();

byte [] b1 = b.getBytes();

String sum = "";

for(int i=0;i<len;i++){

if(a1[i]==b1[i])

{

sum=sum+"0";

}

else

sum=sum+"1";

}

int sum10 = Integer.valueOf(sum,2);

System.out.println(sum10);

}

}


5 条回复

啥情况?         

2017-04-07 21:20

sca.nextLine()改成sca.next(),我也是这种情况,输入就会异常,还好最后一秒改过来了,或者在int n=nextInt()后面加一行sca.nextLine(),因为nextInt()不会处理换行符。

2017-04-07 21:21

public class Main {


public static void main(String[] args) throws IOException {


  Scanner sc=new Scanner(System.in);

      int len=Integer.parseInt(sc.nextLine());

String a=sc.nextLine();

String b=sc.nextLine();

byte [] a1= a.getBytes();

byte [] b1 = b.getBytes();

System.out.println(a1[1]);

System.out.println(b1[1]);

String sum = "";

for(int i=0;i<len;i++){

if(a1[i]==b1[i])

{

sum=sum+"0";

}

else

sum=sum+"1";

}

int sum10 = Integer.valueOf(sum,2);

System.out.println(sum10);

}

}



2017-04-07 21:22

nextInt()不会处理换行符。

在自己的IDE里输入实例试试就明白了。

另外,API是个好东西。

int a=Integer.valueOf("1000",2);

int b=Integer.valueOf("1100",2);

Sytem.out.println(a^b);

2017-04-08 12:36

呃呃

2017-04-09 20:29
添加回复
回到顶部