Frage im Vorstellungsgespräch bei Meta

Add two binary numbers (Input as a string)

Antworten zu Vorstellungsgespräch

Anonym

14. Aug. 2014

Pretty certain this question would require you to not use a built-in integer parser.

8

Anonym

24. Aug. 2014

Answer by Casper is wrong in two aspects: first, it assumes that strings has equal length (which is very presumptions). And even doing that it doesn't account the case when both numbers start from 1 - for that the length of the resulting string will be bigger by 1.

Anonym

22. Sep. 2014

static String add(String n1,String n2){ int carry=0; StringBuilder sb=new StringBuilder(); Stacks=new Stack(); int sLoop=Integer.max(n1.length(),n2.length()); for(int i=0;ii)v+=n1.charAt(n1.length()-1-i)-'0'; if(n2.length()>i)v+=n2.charAt(n2.length()-1-i)-'0'; v+=carry; if(v%2==0)s.add('0'); else s.add('1'); carry=v/2; } if(carry==1)s.add('1'); while(!s.isEmpty())sb.append(s.pop()); return sb.toString(); }

Anonym

29. Sep. 2014

public static int addBinary(String binary1, String binary2) { int binary1Integer = 0; int binary2Integer = 0; for (int i = binary1.length() - 1; i >= 0; i--) if (binary1.charAt(i) == '1') { binary1Integer += Math.pow(2, binary1.length()-i-1); } for (int i = binary2.length() - 1; i >= 0; i--) { if (binary2.charAt(i) == '1') binary2Integer += Math.pow(2, binary2.length()-i-1); } return binary1Integer + binary2Integer; }

Anonym

24. Dez. 2014

#include using namespace std; char addBits (char c1, char c2, bool &carry); string sumBinary (string s1, string s2); int main() { cout len2 ? s1: s2; int len3 = s3.length() -1; bool carry = false; while (len1>=0 || len2>=0) { char b1 = len1>=0? s1[len1--]: '0'; char b2 = len2>=0? s2[len2--]: '0'; if (b1 > '1' || b1 '1' || b2 < '0') { cout << "invalid character"; return ""; } s3[len3--] = addBits(b1,b2,carry); } if (carry) s3 = "1" + s3; return s3; } char addBits (char c1, char c2, bool &carry) { char rc; int i1 = c1=='0'? 0:1; int i2 = c2=='0'? 0:1; int ic = carry ? 1: 0; int sum = i1 + i2 +ic; switch (sum) { case 3: carry = true; rc = '1'; break; case 2: carry = true; rc = '0'; break; case 1: carry = false; rc = '1'; break; default: rc = '0'; } return rc; }

Anonym

24. Dez. 2014

#include using namespace std; string sumBinary (string s1, string s2); int main() { cout len2 ? s1: s2; int len3 = s3.length() -1; bool carry = false; while (len1>=0 || len2>=0) { int i1 = len1>=0? s1[len1--] - '0': 0; int i2 = len2>=0? s2[len2--] - '0': 0; // Check if any invalid character if (i1 1 || i21) return ""; // 3 bit sum int sum = i1 ^ i2 ^ carry; // 3 bit carry carry = (i1 & carry) | (i2 & carry) | (i1 & i2); s3[len3--] = '0' + sum; } if (carry) s3 = "1" + s3; return s3; }

Anonym

23. Juli 2018

Add two binary numbers (Input as a string) int strToNum(string a) { int res = 0; for( int i=a.length()-1;i>=0;i--) res += (1<

Anonym

28. Juli 2018

// Not using any built-in libraries // Emulate a binary full adder const addBits = (a, b, c) => { switch(`${a}${b}${c}`) { case '000': return { sum: '0', carry: '0' }; case '001': case '010': case '100': return { sum: '1', carry: '0' }; case '011': case '101': case '110': return { sum: '0', carry: '1' }; case '111': return { sum: '1', carry: '1' }; } }; const sum = (a, b) => { let longNum = a.split('').reverse(); let shortNum = b.split('').reverse(); const sum = []; let carry = 0; let i; for(i = 0; i < shortNum.length; i++) { const result = addBits(longNum[i], shortNum[i], carry); sum.unshift(result.sum); carry = result.carry; } for(;i < longNum.length; i++) { const result = addBits(longNum[i], '0', carry); sum.unshift(result.sum); carry = result.carry; } if (carry === '1') { sum.unshift(carry); } return sum.join(''); } console.log(sum('1111', '1'));

Anonym

12. März 2019

Seeing so many ugly answers here's mine in JavaScript ES6 (let, const, arrow functions) I did in 15 minutes on paper to start. const binaryAdd = (s1, s2) => { const longer = Math.max(s1.length, s2.length); let finalSum = 0; let carry = 0; for (let index = 0; index = 2) { carry = 1; } else { carry = 0; } finalSum += sum % 2 ? 2 ** index : 0; } if (carry) { finalSum += 2 ** longer; } return finalSum; };

Anonym

14. März 2019

Here's my one line python solutions class Solution(object): def addBinary(self, a, b): """ :type a: str :type b: str :rtype: str """ return bin(int(a,2) + int(b,2))[2:] class Solution(object): def addBinary(self, a, b): """ :type a: str :type b: str :rtype: str """ return bin(eval['0b' + a) + eval['0b' + b))[2:]

Anonym

10. Feb. 2020

public static int binaryToInt(String s) { int len = s.length(); int val = 0; for (int i = 0; i

Anonym

13. Sep. 2014

Java answer: private static String calcBinaryAdd (String num1, String num2) { String answer = ""; int length = 0; int numIndex = 0; int sum = 0; int carry = 0; if(num1.length() > num2.length()) { length = num1.length(); } else if (num2.length() > num1.length()) { length = num2.length(); } else { length = num1.length(); } int [] numArray1 = new int[length]; int [] numArray2 = new int[length]; int [] answerArray = new int [numArray1.length + 1]; populateArray(num1, numArray1); populateArray(num2, numArray2); numIndex = answerArray.length-1; while(numIndex > 0) { sum = numArray1[numIndex-1] + numArray2[numIndex-1] + carry; if(sum > 1) { carry = sum / 2; sum = sum % 2; } else { carry = 0; } answerArray[numIndex] = sum; numIndex--; } answerArray[0] = carry; return Arrays.toString(answerArray); } private static void populateArray (String num, int[] numArray) { for(int i = num.length()-1; i>=0; i--) { numArray[i+ (numArray.length-num.length())] = num.charAt(i) - '0'; } }

Anonym

14. Aug. 2014

#include #include #include char * add_numbers(char *num1, char *num2); main() { char *num1 = "10001"; char *num2 = "00111"; printf ("num1 %s + num2 %s is %s ", num1, num2, add_numbers(num1, num2)); } char * add_numbers(char *num1, char *num2) { char *num; int len; int carry = 0; len = strlen( num1); num = malloc (sizeof(char) * len); len--; //offset while (len >= 0) { if (num1[len] == '0' && num2[len] == '0') { num[len] = (carry) ? '1' : '0'; carry = 0; } else if (num1[len] == '1' && num2[len] == '1') { num[len] = (carry) ? '1' : '0'; carry = 1; } else if (num1[len] == '1' && num2[len] == '0') { if (carry) { num[len] = '0'; carry = 1; } else { num[len] = '1'; } } else if (num1[len] == '0' && num2[len] == '1') { if (carry) { num[len] = '0'; carry = 1; } else { num[len] = '1'; } } len--; } return num; }