首页 > 代码库 > LeetCode Add Binary 两个二进制数相加

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!=\0){12             pa++;13             na++;14         }15         pa--;16         while(*pb!=\0){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             else41                 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             else63                 return b;64         }65     }66 };

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

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

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

 

LeetCode Add Binary 两个二进制数相加