LintCode 容易 二進位制求和遇到的bug

2021-07-15 04:49:59 字數 3292 閱讀 4537

之前錯誤**

#include

#include

#include

#include

using

std::initializer_list;

using

std::vector;

using

std::string;

using

std::cin;

using

std::cout;

using

std::endl;

string addbinary(string& a, string& b)

cout

<< i << endl << m;}}

if (answer[0] == 0)

return answer;

}int main()

結果:死迴圈,下標越界

bug1:

string

::size_type i =

3;// st.size() - 1;

string

::size_type m =

5; - 1;

for (; i >=

0; i--,m--)*/

cout <

}

其中錯誤點在:

for (; i >= 0; i--,m--){}
改正後

for (; i >= 1; i--,m--){}
原因:string::size_type是unsigned型,通俗點,都是整數,從0迴圈到4 294 967 295,即32位的無符號數的最大值(umax),所以總是》=0。

bug2:

string a,b;

string::size_type i = 3;// st.size() - 1;

string::size_type m = 5; - 1;

int jinwei = 0;

//lg[m],st[i],answer[m+1]

jinwei = ( st[i] + lg[m]) / 2;

answer[m + 1] = ( st[i] + lg[m]+jinwei) %2;

//lg[m-1],st[i-1],answer[m]

for (; i >= 1; i--,m--)

cout <1

<1

<< endl ;

}

其中錯誤點在於:

string a,b;

jinwei = ( st[i] + lg[m]) / 2

; answer[m + 1] = ( st[i] + lg[m]+jinwei) %2

;

原因:

第一:string a,b為空字串。

第二:將a,b初始化後,

string a(7,』0』);

string b(8, 『1』);

cout<

int p = int(st[i]-'0'); 

int q = int(lg[m] - '0');

jinwei = (p+q) / 2;

answer[m + 1] =( (p + q + jinwei) % 2+'0');

此時jinwei和answer的輸出為int型了。

bug3:

//由於如果i>=0,程式死迴圈,所以最高位處進製額外計算。

int p = int(st[0] - '0');

int q = int(lg[0] - '0');

jinwei = (p + q) / 2;

answer[0] = ((p + q + jinwei) % 2 + '0');

改正一(還是有錯的):

int p = int(st[0] - '0');

int q = int(lg[w] - '0');

jinwei = (p + q) / 2;

answer[w + 1] = ((p + q + jinwei) % 2 + '0');

answer[w ] = jinwei; //cout << answer[w + 1];

//cout << w ;

原因:之前邏輯錯誤,正確思路應分兩部分,一部分為st.size(), 另一部分為lg.size()-st.size()。

此處只計算了最高位,比如,lg(「11111」),st(「11」), 則第乙個迴圈計算後結果是:answer=」11110」, 第二個迴圈計算後結果才是正確答案。

bug4:

for (; i >= 1; i--,m--)
改正:

for (;i!=-1; i--,m--)
原因:

我們計算是從lg、st兩個字串最後一位開始計算,所以應該先算answer[m+1], 然後計算jinwei.

bug5:結果錯誤

for (; w != 0; w--)
測試用例:

string a("11111");

string b("11");

此部分**測試結果:

改正:

for (; w != -1; w--)
原因:

1.最初**,w沒有取到0.

2.answer[w]的值在

answer[w ] = (p + jinwei) % 2 + '0';

jinwei = (p + jinwei) / 2;

這兩個表示式中相同

bug6:

程式沒有執行此**

if (answer[0] == 0)
原因:answer[0]為char型,值為48,當然!=0,所以也就沒執行這段**,另外需注意substr(1,m)是指從下標為1開始擷取(包括1),擷取m個!

改正:

if (answer[0]-'0' == 0)

LintCode 容易)二進位制求和

class solution 計算多出的部位 for w 1 w if answer 0 0 0 return answer vc版見project 二進位制求和。總結 1.string裡面的是字元,輸出的時候可以正確輸出數值,但是當利用其中字元型數字計算時,用到的將是它的ascii碼,要想得到st...

Lintcode 二進位制求和

給定兩個二進位制字串,返回他們的和 用二進位制表示 樣例 1 輸入 a 0 b 0 輸出 0 樣例 2 輸入 a 11 b 1 輸出 100 python class solution param a a number param b a number return the result def a...

LintCode 更新二進位制位

給出兩個32位的整數n和m,以及兩個二進位制位的位置i和j。寫乙個方法來使得n中的第i到j位等於m m會是n中從第i為開始到第j位的子串 樣例 給出n 10000000000 2,m 10101 2,i 2,j 6 返回 n 10001010100 2 分析 如果是兩個二進位制的字串,結果就是遍歷陣...