• LeetCode Add Binary 两个二进制数相加


     1 class Solution {
     2 public:
     3     string addBinary(string a, string b) {
     4         if(a==""&&b=="")    return "";
     5         if(a=="")    return b;
     6         if(b=="")    return a;
     7         char *pa=&a[0],*pb=&b[0];
     8         int na=0,nb=0;
     9         int i=0;
    10         int t=0,m=0;
    11         while(*pa!=''){
    12             pa++;
    13             na++;
    14         }
    15         pa--;
    16         while(*pb!=''){
    17             pb++;
    18             nb++;
    19         }
    20         pb--;
    21         if(na>=nb){        //存a中
    22             for(i=na-1;i>-1;i--){
    23                 if(i>na-nb-1){
    24                     m=(*pa-'0') + (*pb-'0')+t;
    25                     pa--;
    26                     pb--;
    27                 }
    28                 else if( i<na-nb &&t ==0 )
    29                         return a;
    30                 else{
    31                     m=(*pa-'0')+t;
    32                     pa--;
    33                 }
    34                 t=m/2;        //进位
    35                 m=m%2;        //当前位
    36                 a[i]=m+'0';
    37             }
    38             if(t>0)
    39                 return ("1"+a);
    40             else
    41                 return a;
    42         }
    43         else{            //存b中
    44             for(i=nb-1;i>-1;i--){
    45                 if(i>nb-na-1){
    46                     m=(*pb-'0') + (*pa-'0')+t;
    47                     pa--;
    48                     pb--;
    49                 }
    50                 else if( i<nb-na &&t ==0 )
    51                         return b;
    52                 else{
    53                     m=(*pb-'0')+t;
    54                     pb--;
    55                 }
    56                 t=m/2;        //进位
    57                 m=m%2;        //当前位
    58                 b[i]=m+'0';
    59             }
    60             if(t>0)
    61                 return ("1"+b);
    62             else
    63                 return b;
    64         }
    65     }
    66 };

    题意:给出两个字符串,里面分别存有一个二进制数,将二进制相加后返回结果,依然是字符串型。

    思路:两个指针,从后面开始将两个二进制数相加,如果有一个比较长,那么另一个指针肯定先扫完一个字符串,此时将结果保存在较长的那个字符串中返回。在一个字符串已扫完的情况下,另一个字符串的未扫完部分扔要判断是否需要继续加,这取决于进位是否为0,若为0,连后面未扫部分都不用扫了,直接返回这个扔有未扫的字符串。若进位不为0,那么就要一个个继续扫下去了,只要满足一个条件就能不用继续往下扫,此条件是进位为0。若未扫完的那个字符串扫到完了,需再考虑一次进位。

    吐槽:代码是草稿代码,但是AC了,从比较容易理解的角度写的。

  • 相关阅读:
    性能分析之路-------各指标代表意思以及分析
    selenium python 定位一组对象
    python 操作word文档
    nmon的安装以及使用
    nginx的监控配置
    selenium 一个简单的流程
    Fiddler手机抓包设置
    urllib、urllib2、urllib3区别和使用
    mysql数据库改名的方法
    Python之pymysql
  • 原文地址:https://www.cnblogs.com/xcw0754/p/4125037.html
Copyright © 2020-2023  润新知