输入两个字符串a和b,字符串内容为二进制数字,求两个字符串相加的结果,加法计算方法以二进制方式计算,并返回对应的字符串结果。要求程序尽可能的高效。示例如下:/**
* @param a = "1101"
* @param b = "1100"
* @return "11001"
*/
public String add(String a, String b){ }
数据范围:
输入两个字符串a和b,字符串内容为二进制数字,求两个字符串相加的结果,加法计算方法以二进制方式计算,并返回对应的字符串结果。要求程序尽可能的高效。示例如下:/**
* @param a = "1101"
* @param b = "1100"
* @return "11001"
*/
public String add(String a, String b){ }
输入两个字符串,如"1101", "1100"
"11001"
1101 1100
11001
0 1
1
import java.util.*; //二进制的加法 public class Main3 { public static void main(String[] args){ Scanner sca = new Scanner(System.in); String[] str = sca.nextLine().split(" "); String a = str[0]; String b = str[1]; System.out.println(addBinary(a,b)); } public static String addBinary(String a, String b) { StringBuilder sb = new StringBuilder(); int aLen = a.length(); int bLen = b.length(); int max = Math.max(aLen, bLen); StringBuilder ar = new StringBuilder(a).reverse();//反转,因为两个数从低位开始相加 StringBuilder br = new StringBuilder(b).reverse(); boolean isCarry = false;//是否进位 for (int i = 0; i < max; i++) { char aChar = i >= aLeng ? '0' : ar.charAt(i); char bChar = i >= bLen ? '0' : br.charAt(i); if (aChar == '1' && bChar == '1') { sb.append(isCarry ? '1' : '0'); isCarry = true; } else if (aChar == '0' && bChar == '0') { sb.append(isCarry ? '1' : '0'); isCarry = false; } else { sb.append(isCarry ? '0' : '1'); } } if (isCarry) sb.append("1"); return sb.reverse().toString(); } }
二进制转十进制,可以利用公式转换
十进制转二进制,忘了,直接调用Integer中的静态方法toBinaryString()
import java.util.*; public class Main { public static void main(String [] args) { Scanner sc=new Scanner(System.in); while(sc.hasNext()) { String str1=sc.next(); String str2=sc.next(); int r=getResult(str1)+getResult(str2); String result=Integer.toBinaryString(r); System.out.println(result); } } public static int getResult(String str) { int sum=0; for(int i=0;i<str.length();i++) { char s=str.charAt(i); String ss=""+s; int num=Integer.parseInt(ss); sum+=num*Math.pow(2,str.length()-i-1); //根据二进制转十进制的公式 } return sum; } }