zoukankan      html  css  js  c++  java
  • 力扣算法题—067二进制求和

    给定两个二进制字符串,返回他们的和(用二进制表示)。

    输入为非空字符串且只包含数字 1 和 0

    示例 1:

    输入: a = "11", b = "1"
    输出: "100"

    示例 2:

    输入: a = "1010", b = "1011"
    输出: "10101"

     1 #include "_000库函数.h"
     2 
     3 //从末尾一位一位的相加
     4 class Solution {
     5 public:
     6     string addBinary(string a, string b) {
     7         if (a.empty())return b;
     8         if (b.empty())return a;
     9         int p1 = a.size() - 1,p2=b.size()-1;
    10         string res = p1 > p2 ? a : b;//选用较长的二进制做基
    11         int p = p1 > p2 ? p1 : p2;
    12         int s = 0;//进位
    13         while (p>=0) {
    14             if (min(p1, p2) >= 0)//两数相加
    15                 s = a[p1--] - '0' + b[p2--] - '0' + s;
    16             else
    17                 s = res[p] - '0' + s;//进位想加
    18             
    19             res[p--] = s % 2 + '0';
    20             s = s / 2;
    21         }
    22         if (s) {//进位
    23             a = "1";
    24             res = a + res;
    25         }
    26         return res;
    27     }
    28 };
    29 
    30 //下面这种写法又巧妙又简洁,用了两个指针分别指向a和b的末尾,
    31 //然后每次取出一个字符,转为数字,若无法取出字符则按0处理,
    32 //然后定义进位carry,初始化为0,将三者加起来,对2取余即为当前位的数字,
    33 //对2取商即为当前进位的值,记得最后还要判断下carry,如果为1的话,要
    34 //在结果最前面加上一个1,参见代码如下:
    35 class Solution {
    36 public:
    37     string addBinary(string a, string b) {
    38         string res = "";
    39         int m = a.size() - 1, n = b.size() - 1, carry = 0;
    40         while (m >= 0 || n >= 0) {
    41             int p = m >= 0 ? a[m--] - '0' : 0;
    42             int q = n >= 0 ? b[n--] - '0' : 0;
    43             int sum = p + q + carry;
    44             res = to_string(sum % 2) + res;
    45             carry = sum / 2;
    46         }
    47         return carry == 1 ? "1" + res : res;
    48     }
    49 };
    50 void T067() {
    51     Solution s;
    52     string a, b;
    53     a = "11";
    54     b = "1";
    55     cout << s.addBinary(a, b) << endl;
    56     a = "1010";
    57     b = "1011";
    58     cout << s.addBinary(a, b) << endl;
    59     a = "11010";
    60     b = "";
    61     cout << s.addBinary(a, b) << endl;
    62 
    63 
    64 }
  • 相关阅读:
    測试能否发表博客
    换站点Logo图片---轻开电子商务系统(企业入门级B2C站点)
    后台运行命令:&amp;和nohup command &amp; 以及关闭、查看后台任务
    HttpClient将手机上的数据发送到服务器
    支付宝电脑网站支付
    远程使用tomcat8的首页的管理工具
    数据结构之链表基本操作
    数据结构之链表反向打印
    ultraedit开发使用技巧
    charles抓取https中出现unknow
  • 原文地址:https://www.cnblogs.com/zzw1024/p/10685283.html
Copyright © 2011-2022 走看看