添加两个二进制字符串的程序

给定两个二进制字符串,返回它们的和(也是一个二进制字符串)。 例子:

null
Input:  a = "11", b = "1"Output: "100" 

我们强烈建议您尽量减少浏览器,并先自己尝试 其思想是从两个字符串的最后一个字符开始,逐个计算数字和。如果总和大于1,则存储下一位的进位。

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 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 differnce 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)
{
// 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>


输出:

10001

感谢Gaurav Ahirwar提出上述解决方案。如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写评论

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享