首页 > 试题广场 >

二进制求和

[编程题]二进制求和
  • 热度指数:2165 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定两个用字符串表示的二进制数,返回他们的和。

数据范围:字符串长度满足 ,字符串中只含有 0 和 1,且保证除 0 以外的二进制数没有前导零的情况。
示例1

输入

"101","1"

输出

"110"
示例2

输入

"0","1"

输出

"1"
示例3

输入

"1","1"

输出

"10"
import java.util.*;
import java.math.*;

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param A string字符串 
     * @param B string字符串 
     * @return string字符串
     */
    public String binaryAdd (String A, String B) {
        // write code here
        //使用BigInteger将2进制转为10禁止
        BigInteger num1=new BigInteger(A,2);
        BigInteger num2=new BigInteger(B,2);
        //将十进制转为2进制字符串
        BigInteger num=num1.add(num2);
        String str=num.toString(2);
        return str;
    }
}

发表于 2023-05-19 09:23:18 回复(0)
又是下雨偏头痛的一天
public String binaryAdd (String A, String B) {
        BigInteger a=new BigInteger(A,2);
        BigInteger b=new BigInteger(B,2);
        BigInteger c=a.add(b);
        return c.toString(2);
    }


发表于 2022-06-07 18:04:29 回复(0)
除了python,我java也可以调接口
import java.util.*;
import java.math.BigInteger;

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param A string字符串 
     * @param B string字符串 
     * @return string字符串
     */
    public String binaryAdd (String A, String B) {
        BigInteger a = new BigInteger(A,2);
        BigInteger b = new BigInteger(B,2);         
        return (a.add(b)).toString(2);
    }
}


发表于 2022-03-09 22:34:58 回复(0)
import java.util.*;

public class Solution {
    public String binaryAdd (String A, String B) {
        int i = A.length()-1, j = B.length()-1;
        StringBuilder res = new StringBuilder();
        int carry = 0, val = 0;
        while (i >= 0 || j >= 0) {
            val = 0;
            val += carry;
            if (i >= 0) val += A.charAt(i--)-'0';
            if (j >= 0) val += B.charAt(j--)-'0';
            carry = val / 2;
            val %= 2;
            res.append(val);
        }
        if (carry > 0) res.append(carry);
        return res.reverse().toString();
    }
}
发表于 2022-02-06 16:55:07 回复(0)
模拟竖式求和,和leetcode的第二题“Add two numbers”链表两数之和的做法相同,从低位往高位加,只不过这里是二进制的。
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param A string字符串 
     * @param B string字符串 
     * @return string字符串
     */
    public String binaryAdd (String A, String B) {
        // write code here
        int n = A.length(), m = B.length();
        // 竖式求和
        int carry = 0;      // 进位
        Stack<Integer> stack = new Stack<>();
        for(int i = n - 1, j = m - 1; i >= 0 || j >= 0; i--, j--){
            int sum = (i >= 0? A.charAt(i) - '0': 0) + (j >= 0? B.charAt(j) - '0': 0) + carry;
            stack.push(sum % 2);
            carry = sum / 2;
        }
        if(carry > 0) {
            stack.push(carry);
        }
        StringBuilder res = new StringBuilder();
        while(!stack.isEmpty()){
            res.append(stack.pop());
        }
        return res.toString();
    }
}

发表于 2021-12-11 18:18:35 回复(0)

问题信息

难度:
8条回答 3079浏览

热门推荐

通过挑战的用户

查看代码