1. 程式人生 > >【LEETCODE】【簡單】#67 二進位制求和

【LEETCODE】【簡單】#67 二進位制求和

給定兩個二進位制字串,返回他們的和(用二進位制表示)。

輸入為非空字串且只包含數字 1 和 0

示例 1:

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

示例 2:

輸入: a = "1010", b = "1011"
輸出: "10101"
class Solution {
public:
    string addBinary(string a, string b) {
        string c="";
        int i,j;
        int flag=0;    //記錄進位
        for(i=a.size()-1,j=b.size()-1;i>=0||j>=0;i--,j--){
            if(i<0){a.insert(a.begin(),'0');i=0;}  //如果二進位制數a較短則插入0再與b相加
            if(j<0){b.insert(b.begin(),'0');j=0;}
            switch((a[i]-'0')+(b[j]-'0')+flag){    //二進位制位相加的四種情況
                case 3:
                    c.insert(c.begin(),'0'+1);    //1+1+1=1,進位1
                    flag=1;
                    break;
                case 2:
                    c.insert(c.begin(),'0'+0);    //1+1+0=0.進位1
                    flag=1;
                    break;
                case 1:
                    c.insert(c.begin(),'0'+1);    //1+0+0=1,進位0
                    flag=0;
                    break;
                case 0:
                    c.insert(c.begin(),'0'+0);    //0+0+0=0,進位0
                    flag=0;
                    break;
            }
            //cout<<flag<<endl;
        }
        if(flag==1)c.insert(c.begin(),'1');    //考慮最高位進位
        return c;
    }
};

【後記】

1.這道題!本來想投機取巧,把二進位制轉化成整數相加再轉化成二進位制,結果!溢!出!了!看著錯誤報告裡一長串數字我是崩潰的。。。