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); }}
阅读全文
0 0
- 1217: 二进制计算
- 二进制计算
- 二进制计算
- 计算二进制序列数
- 正负数二进制计算
- 二进制的高精度计算
- 1042 -- 二进制计算
- 计算二进制‘1’位数
- 二进制与地址计算
- 二进制,十进制,十六进制计算
- HDU5969(二进制计算)
- 计算二进制序列的值
- 小数的二进制计算t
- 为什么计算机要使用二进制
- ASCII和二进制的计算
- 计算二进制数的位数
- PHP 二进制高精度计算函数
- JS 二进制计算,如何得到一个负数的二进制表示
- css 中的小技巧和存在的坑
- rabbitmq常见运维命令和问题总结
- Android提取HTML代码内的所有文字内容
- jsp判断用户是否登录
- 测试理论基础
- 1217: 二进制计算
- 第一次课安卓
- MatConvNet 网络模型结构可视化的方法
- Swift在同一条语句中传递方法结果到方法参数情况的处理
- duilib——WindowImplBase的使用
- cglib动态代理介绍
- 【Tensorflow】图和模型的保存机制与原理
- HDU----I Think I Need a Houseboat
- 动态代理