码迷,mamicode.com
首页 > 其他好文 > 详细

Add Binary

时间:2014-10-27 12:31:45      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   ar   for   sp   strong   div   

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\n");
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] = \0;
66 }

 

Add Binary

标签:style   blog   color   io   ar   for   sp   strong   div   

原文地址:http://www.cnblogs.com/utank/p/4053715.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!