Add to List 67

来源:互联网 发布:g76车锥螺纹编程实例 编辑:程序博客网 时间:2024/06/17 17:22

Given two binary strings, return their sum (also a binary string).

For example,
a = "11"
b = "1"
Return "100".

实值相加会有问题,超过int上限就会报错,代码如下:

class Solution {public:    string addBinary(string a, string b) { string c_string;stringstream c;int numa = 0;int numb = 0;int output;int lengtha = a.size();int lengthb = b.size();for (int i = lengtha; i > 0; i--){int d = pow(2, i - 1);numa = numa + (a[i - 1]-'0') * pow(2,lengtha-i);}for (int i = lengthb; i > 0; i--){numb = numb + (b[i - 1] - '0') * pow(2,lengthb-i);}output = numa + numb;if (numa == 0&&numb==0)return "0";while (output != 0){c << (output%2);output >>= 1;}c_string = c.str();stringstream trans_string;int lengthstring = c_string.size();int i = 0;int j = lengthstring;while (i<lengthstring){trans_string << c_string[j-1];i++;j--;}c_string = trans_string.str();return c_string;    }};
采用补位逐位运算:

class Solution {public:    string addBinary(string a, string b) {     string ret;     int la=a.size();     int lb=b.size();     int s=0;     int sj=0;     int add='0';     int lmax=max(la,lb);     for(int i=0;i<lmax;i++)     {        char ca=la>i?a[la-1-i]:'0';        char cb=lb>i?b[lb-1-i]:'0';        char s=(ca==cb?'0':'1');        char sj=(s==add?'0':'1');        if(s==add&&add=='1'||ca=='1'&&cb=='1')            add='1';        else            add='0';             ret+=sj;      }    if(add=='1')        ret+=add;    reverse(ret.begin(),ret.end());    return ret;    }};




原创粉丝点击