给定两个二进制字符串,返回它们的和(也是一个二进制字符串)。 例子:
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