首页 > 试题广场 >

字符串加法

[编程题]字符串加法
  • 热度指数:5770 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解


输入两个字符串a和b,字符串内容为二进制数字,求两个字符串相加的结果,加法计算方法以二进制方式计算,并返回对应的字符串结果。要求程序尽可能的高效。示例如下:
/**
*
@param a = "1101"
*
@param b = "1100"
*
@return "11001"
*/
public String add(String a, String b){ }

数据范围:

输入描述:
输入两个字符串,如"1101", "1100"


输出描述:
"11001"
示例1

输入

1101 1100

输出

11001
示例2

输入

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();
    }
}

发表于 2020-04-02 17:30:24 回复(0)
  • 二进制转十进制,可以利用公式转换

  • 十进制转二进制,忘了,直接调用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;
       }
    }
发表于 2020-02-12 20:39:35 回复(0)