Question:
Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
Solution:
1 #define MAX_STR_LEN (1000) 2 void add_binary(char *s, char *s1, char *s2) 3 { 4 int i; 5 int l, l1, l2; 6 int tmp; 7 char x[ MAX_STR_LEN ]; 8 9 l1 = strlen(s1); 10 l2 = strlen(s2); 11 l = 0; 12 tmp = 0; 13 memset(x, 0x00, sizeof(x)); 14 while(l1 > 0 && l2 > 0) 15 { 16 tmp = s1[--l1] + s2[--l2] + tmp - 2 * '0'; 17 switch(tmp) 18 { 19 case 0: 20 tmp = 0; 21 x[l++] = '0'; 22 break; 23 case 1: 24 tmp = 0; 25 x[l++] = '1'; 26 break; 27 case 2: 28 tmp = 1; 29 x[l++] = '0'; 30 break; 31 case 3: 32 tmp = 1; 33 x[l++] = '1'; 34 break; 35 default: 36 printf("xxx err "); 37 break; 38 } 39 } 40 while(l1 > 0) 41 { 42 tmp = s1[--l1] + tmp - '0'; 43 if(tmp == 0) 44 { 45 tmp = 0; 46 x[l++] = '0'; 47 } 48 else if (tmp == 1) 49 { 50 tmp = 0; 51 x[l++] = '1'; 52 } 53 else /* tmp == 2 */ 54 { 55 tmp = 1; 56 x[l++] = '0'; 57 } 58 59 } 60 while(l2 > 0) 61 { 62 tmp = s2[--l2] + tmp - '0'; 63 if(tmp == 0) 64 { 65 tmp = 0; 66 x[l++] = '0'; 67 } 68 else if (tmp == 1) 69 { 70 tmp = 0; 71 x[l++] = '1'; 72 } 73 else /* tmp == 2 */ 74 { 75 tmp = 1; 76 x[l++] = '0'; 77 } 78 } 79 if(tmp) 80 x[l++] = '1'; 81 for(i = 0; i < l; i++) 82 { 83 s[l-i-1] = x[i]; 84 //s[i] = x[i]; 85 } 86 }
Extension:
大数加法:
1 #define MAX_STR_LEN (1000) 2 void add_large_number(char *s, char *s1, char *s2) 3 { 4 char x[MAX_STR_LEN ]; 5 int l1, l2, l; 6 int i, tmp, carry; 7 8 l1 = strlen(s1); 9 l2 = strlen(s2); 10 carry = 0; 11 l = 0; 12 13 while(l1 > 0 && l2 > 0) 14 { 15 tmp = s1[--l1] + s2[--l2] - 2 * '0' + carry; 16 if(tmp < 10) 17 { 18 carry = 0; 19 x[l++] = tmp + '0'; 20 } 21 else 22 { 23 carry = 1; 24 x[l++] = tmp % 10 + '0'; 25 } 26 } 27 while(l1 > 0) 28 { 29 tmp = s1[--l1] - '0' + carry; 30 if(tmp < 10) 31 { 32 x[l++] = tmp + '0'; 33 carry = 0; 34 } 35 else 36 { 37 x[l++] = tmp % 10 + '0'; 38 carry = 1; 39 } 40 } 41 while(l2 > 0) 42 { 43 tmp = s2[--l2] - '0' + carry; 44 if(tmp < 10) 45 { 46 x[l++] = tmp + '0'; 47 carry = 0; 48 } 49 else 50 { 51 x[l++] = tmp % 10 + '0'; 52 carry = 1; 53 } 54 } 55 if(carry) 56 { 57 x[l++] = '1'; 58 } 59 60 for(i = 0; i < l; i++) 61 { 62 s[l-i-1] = x[i]; 63 //s[i] = x[i]; 64 } 65 s[l] = '