之前錯誤**
#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 分析 如果是兩個二進位制的字串,結果就是遍歷陣...