Question d’entretien chez Meta

Write a function to multiply two arbitrarily large integers.

Réponses aux questions d'entretien

Utilisateur anonyme

3 oct. 2010

BINT mult (BINT a, BINT b) { BINT sign = 1; if (a 0) { BINT a16 = a & 0xFF; while (b > 0) { BINT b16 = b & 0xFF; BINT tr = a16 * b16; r += tr >= 16; sn += 16; } a >>= 16; sn += 16; } return sign < 0 ? -r : r; }

2

Utilisateur anonyme

3 oct. 2010

The solution I posted assumed that it is 32 bit computer. but if you are not sure about this, you have to use string to do multiplication.

Utilisateur anonyme

17 févr. 2011

void Add(char str1[], char str2[], int offset) { int carry = 0; int len2 = strlen(str2); int i; for (i = 0; i < len2; i++) { int digit1 = TO_INT(str1[i + offset]); int digit2 = TO_INT(str2[i]); int result = digit1 + digit2 + carry; str1[i + offset] = TO_CHAR(result % 10); carry = result / 10; } while (carry != 0) { int digit = TO_INT(str1[i]); int result = digit + carry; str1[i + offset] = TO_CHAR(result % 10); carry = result / 10; } } char *Multiply(char str1[], char str2[]) { int len1 = strlen(str1); int len2 = strlen(str2); int product_len = len1 + len2; char *product = new char[product_len + 1]; for (int i = 0; i < product_len; i++) product[i] = '0'; product[product_len] = '\0'; int partial_len = len1 + 1; char partial[partial_len + 1]; for (int i = 0; i < partial_len; i++) partial[i] = '0'; partial[partial_len] = '\0'; for (int i = 0; i < len2; i++) { int digit2 = TO_INT(str2[i]); int carry = 0; int j; for (j = 0; j < len1; j++) { int digit1 = TO_INT(str1[j]); int result = digit1 * digit2 + carry; partial[j] = TO_CHAR(result % 10); carry = result / 10; } partial[j] = TO_CHAR(carry); Add(product, partial, i); } return product; }

Utilisateur anonyme

17 févr. 2011

#define TO_INT(char) ((char) - '0') #define TO_CHAR(int) ((int) + '0')

Utilisateur anonyme

31 janv. 2011

The below function 'multiple', can multiply integers (represented as strings) void strrev(string& s) { for(int i=0;i s2.size())? s1.size() : s2.size(); for(int i=0;i= i+1 )? s1.at(idx)-'0' : 0 ; unsigned int x2 = (s2.size() >= i+1 )? s2.at(idx)-'0' : 0 ; unsigned int x = carryOver + x1 + x2; //cout=0;--i){ char c = s1.at(i); //cout<<"ABC:"<