1217: 二进制计算

来源:互联网 发布:淘宝拍摄基地 编辑:程序博客网 时间:2024/05/21 09:07

题目

Description

计算两个二进制数的和或差。

Input

输入由两个二进制数和一个运算符组成,二进制数和运算符之间用一个空格分隔,格式如下:

num1 op num2

其中num1和num2为要参与运算的二进制数,二进制数只可能是大于零的无符号整数,且num1>=num2,op为运算符,运算符只可能取+或-;当num1和num2的长度不同时,在长度短的数的左侧补零,比如:

1000 - 1

将被视为

1000 - 0001

Output

运算结果,不能有多余的零。

Sample Input

1011 + 1
Sample Output

1100


代码块

import java.util.ArrayList;import java.util.Scanner;public class Main {    public static void main(String[] args) {        Scanner cn = new Scanner(System.in);        String str = cn.nextLine();        boolean flag = false;//这道题目的测试数据,有的有可能空格,有的没有空格,好坑人啊        for (int i = 0; i < str.length(); i++) {            if (str.charAt(i) == ' ')                flag = true;        }        if (flag) {            String[] ss = str.split(" ");            if (ss[1].equals("+")) {                addBinary(ss[0], ss[2]);            }            if (ss[1].equals("-")) {                subBinary(ss[0], ss[2]);            }        } else {            String str1 = "";            String str2 = "";            char ch = 0;            int j = 0;            for (; j < str.length(); j++) {                if (Character.isDigit(str.charAt(j)))                    continue;                else {                    ch = str.charAt(j);                    break;                }            }            str1 = str.substring(0, j);            str2 = str.substring(j + 1, str.length());            if (ch == '+') {                addBinary(str1, str2);            }            if (ch == '-') {                subBinary(str1, str2);            }        }        cn.close();    }    private static void subBinary(String str1, String str2) {        int aLength = str1.length();        int bLength = str2.length();        String result = "";        ArrayList<Integer> aList = new ArrayList<Integer>();        ArrayList<Integer> bList = new ArrayList<Integer>();        for (int i = 0; i < aLength; i++) {            aList.add(0, Integer.parseInt(str1.substring(i, i + 1)));        }        for (int i = 0; i < bLength; i++) {            bList.add(0, Integer.parseInt(str2.substring(i, i + 1)));        }        int j = 0;        int flag = 0;        while (j < bLength) {            int a1 = aList.get(j);            int b1 = bList.get(j);            int sum = 0;            if (a1 - flag >= b1) {                sum = a1 - b1 - flag;                flag = 0;            } else {                sum = 2 - b1 - flag;                flag = 1;            }            result = String.valueOf(sum) + result;            j++;        }        if (j < aLength) {            int a2 = aList.get(j);            int sum = a2 - flag;            result = String.valueOf(sum) + result;            j++;        }        while (j < aLength) {            int a3 = aList.get(j);            result = String.valueOf(a3) + result;            j++;        }        boolean fff = false;        for (int k = 0; k < result.length(); k++) {            if (result.charAt(k) == '1') {                fff = true;            }            if (fff) {                System.out.print(result.charAt(k));            }        }        System.out.println();    }    private static void addBinary(String str1, String str2) {        int aLength = str1.length();        int bLength = str2.length();        String result = "";        ArrayList<Integer> aList = new ArrayList<Integer>();        ArrayList<Integer> bList = new ArrayList<Integer>();        for (int i = 0; i < aLength; i++) {            aList.add(0, Integer.parseInt(str1.substring(i, i + 1)));        }        for (int i = 0; i < bLength; i++) {            bList.add(0, Integer.parseInt(str2.substring(i, i + 1)));        }        int j = 0;        int flag = 0;        while (j < bLength) {            int a1 = aList.get(j);            int b1 = bList.get(j);            int sum = a1 + b1 + flag;            if (sum >= 2) {                sum = sum % 2;                result = String.valueOf(sum) + result;                flag = 1;            } else {                result = String.valueOf(sum) + result;                flag = 0;            }            j++;        }        while (j < aLength) {            int a2 = aList.get(j);            int sum = a2 + flag;            if (sum >= 2) {                sum = sum % 2;                result = String.valueOf(sum) + result;                flag = 1;            } else {                result = String.valueOf(sum) + result;                flag = 0;            }            j++;        }        if (flag == 1) {            result = String.valueOf(flag) + result;        }        System.out.println(result);    }}
原创粉丝点击