Programa para agregar dos strings binarias

Dadas dos strings binarias, devuelva su suma (también una string binaria).

Ejemplo: 

C

// C++ program to add two binary strings
#include <bits/stdc++.h>
using namespace std;
 
// This function adds two binary strings and return
// result as a third string
string addBinary(string A, string B)
{
    // If the length of string A is greater than the length
    // of B then just swap the string by calling the
    // same function and make sure to return the function
    // otherwise recursion will occur which leads to
    // calling the same function twice
    if (A.length() > B.length())
        return addBinary(B, A);
 
    // Calculating the difference between the length of the
    // two strings.
    int diff = B.length() - A.length();
 
    // Initialise the padding string which is used to store
    // zeroes that should be added as prefix to the string
    // which has length smaller than the other string.
    string padding;
    for (int i = 0; i < diff; i++)
        padding.push_back('0');
 
    A = padding + A;
    string res;
    char carry = '0';
 
    for (int i = A.length() - 1; i >= 0; i--) {
        // This if condition solves 110 111 possible cases
        if (A[i] == '1' && B[i] == '1') {
            if (carry == '1')
                res.push_back('1'), carry = '1';
            else
                res.push_back('0'), carry = '1';
        }
        // This if condition solves 000 001 possible cases
        else if (A[i] == '0' && B[i] == '0') {
            if (carry == '1')
                res.push_back('1'), carry = '0';
            else
                res.push_back('0'), carry = '0';
        }
        // This if condition solves 100 101 010 011 possible
        // cases
        else if (A[i] != B[i]) {
            if (carry == '1')
                res.push_back('0'), carry = '1';
            else
                res.push_back('1'), carry = '0';
        }
    }
 
    // If at the end their is carry then just add it to the
    // result
    if (carry == '1')
        res.push_back(carry);
    // reverse the result
    reverse(res.begin(), res.end());
 
    // To remove leading zeroes
    int index = 0;
    while (index + 1 < res.length() && res[index] == '0')
        index++;
    return (res.substr(index));
}
 
// Driver program
int main()
{
    string a = "1101", b = "100";
    cout << addBinary(a, b) << endl;
    return 0;
}

Java

// java program to add
// two binary strings
 
public class GFG {
 
    // This function adds two
    // binary strings and return
    // result as a third string
    static String addBinary(String a, String b)
    {   
          //If the inputs are 0
        if(a.charAt(0) == '0' && b.charAt(0) == '0'){
             return "0";
        }
        // Initialize result
        StringBuilder result = new StringBuilder("");
         
        // Initialize digit sum
        int s = 0;        
 
        // Traverse both strings starting
        // from last characters
        int i = a.length() - 1, j = b.length() - 1;
        while (i >= 0 || j >= 0 || s == 1)
        {
             
            // Comput sum of last
            // digits and carry
            s += ((i >= 0)? a.charAt(i) - '0': 0);
            s += ((j >= 0)? b.charAt(j) - '0': 0);
 
            // If current digit sum is
            // 1 or 3, add 1 to result
            result.append((char)(s % 2 + '0'));
 
            // Compute carry
            s /= 2;
 
            // Move to next digits
            i--; j--;
        }
       
          // Remove leading zeros, if any
          int start = result.length()-1;
         
        while(start >=0 && result.charAt(start) == '0') {
            start--;
        }
         
        if(start != result.length()-1) {
            result.delete(start+1,result.length());
        }
         
        return result.reverse().toString();
    }
 
    //Driver code
    public static void main(String args[])
    {
        String a = "1101", b="100";
         
        System.out.print(addBinary(a, b));
    }
}
 
// This code is contributed by Sam007.

Python3

# Python Solution for above problem:
 
# This function adds two binary
# strings return the resulting string
def add_binary_nums(x, y):
        max_len = max(len(x), len(y))
 
        x = x.zfill(max_len)
        y = y.zfill(max_len)
         
        # initialize the result
        result = ''
         
        # initialize the carry
        carry = 0
 
        # Traverse the string
        for i in range(max_len - 1, -1, -1):
            r = carry
            r += 1 if x[i] == '1' else 0
            r += 1 if y[i] == '1' else 0
            result = ('1' if r % 2 == 1 else '0') + result
            carry = 0 if r < 2 else 1     # Compute the carry.
         
        if carry !=0 : result = '1' + result
 
        return result.zfill(max_len)
 
# Driver code
print(add_binary_nums('1101', '100'))
 
# This code is contributed
# by Anand Khatri

C#

// C# program to add
// two binary strings
using System;
 
class GFG {
     
    // This function adds two
    // binary strings and return
    // result as a third string
    static string addBinary(string a,
                            string b)
    {
         
        // Initialize result
        string result = "";
         
        // Initialize digit sum
        int s = 0;        
 
        // Traverse both strings starting
        // from last characters
        int i = a.Length - 1, j = b.Length - 1;
        while (i >= 0 || j >= 0 || s == 1)
        {
             
            // Comput sum of last
            // digits and carry
            s += ((i >= 0)? a[i] - '0': 0);
            s += ((j >= 0)? b[j] - '0': 0);
 
            // If current digit sum is
            // 1 or 3, add 1 to result
            result = (char)(s % 2 + '0') + result;
 
            // Compute carry
            s /= 2;
 
            // Move to next digits
            i--; j--;
        }
    return result;
    }
     
// Driver Code   
public static void Main()
{
    string a = "1101", b="100";
    Console.Write( addBinary(a, b));
}
}
 
// This code is contributed by Sam007

PHP

<?php
// PHP program to add two binary strings
 
// This function adds two binary strings
// and return result as a third string
function addBinary($a, $b)
{
    $result = ""; // Initialize result
    $s = 0;     // Initialize digit sum
 
    // Traverse both strings starting
    // from last characters
    $i = strlen($a) - 1;
    $j = strlen($b) - 1;
    while ($i >= 0 || $j >= 0 || $s == 1)
    {
        // Comput sum of last digits and carry
        $s += (($i >= 0)? ord($a[$i]) -
                          ord('0'): 0);
        $s += (($j >= 0)? ord($b[$j]) -
                          ord('0'): 0);
 
        // If current digit sum is 1 or 3,
        // add 1 to result
        $result = chr($s % 2 + ord('0')) . $result;
 
        // Compute carry
        $s = (int)($s / 2);
 
        // Move to next digits
        $i--; $j--;
    }
    return $result;
}
 
// Driver Code
$a = "1101";
$b = "100";
echo addBinary($a, $b);
 
// This code is contributed by mits
?>

Javascript

<script>
 
// Javascript program to add
// two binary strings
 
// This function adds two
// binary strings and return
// result as a third string
function addBinary(a, b)
{
     
    // Initialize result
    var result = "";
     
    // Initialize digit sum
    var s = 0;        
 
    // Traverse both strings starting
    // from last characters
    var i = a.length - 1, j = b.length - 1;
    while (i >= 0 || j >= 0 || s == 1)
    {
         
        // Comput sum of last
        // digits and carry
        s += ((i >= 0)? a.charAt(i).charCodeAt(0) -
        '0'.charCodeAt(0): 0);
        s += ((j >= 0)? b.charAt(j).charCodeAt(0) -
        '0'.charCodeAt(0): 0);
 
        // If current digit sum is
        // 1 or 3, add 1 to result
        result = String.fromCharCode(parseInt(s % 2) +
        '0'.charCodeAt(0)) + result;
 
        // Compute carry
        s = parseInt(s/2);
 
        // Move to next digits
        i--; j--;
    }
     
return result;
}
 
//Driver code
var a = "1101", b="100";
 
document.write(addBinary(a, b));
 
// This code is contributed by Amit Katiyar
 
</script>

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *