• Add Binary


    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] = '';
    66 }
  • 相关阅读:
    算法:合并排序(Merge Sort)
    安全:Web 安全学习笔记
    算法:冒泡排序(Bubble Sort)、插入排序(Insertion Sort)和选择排序(Selection Sort)总结
    算法:四种冒泡排序(Bubble Sort)实现
    算法:阶乘的五种算法
    算法:递归知识文章汇总
    算法:插入排序(Insertion Sort)
    .NET:线程本地存储、调用上下文、逻辑调用上下文
    算法:Rate of Growth
    企业应用:一个够用的、通用的状态机(管理实体的业务状态)
  • 原文地址:https://www.cnblogs.com/utank/p/4053715.html
Copyright © 2020-2023  润新知