思路:这个还是要找规律,不能先转为十进制,相加后再转换为二进制,因为如果输入的二进制足够长,转换为十进制以后会溢出
因为我就是这么做的,提交时直接runtime error!
错误的代码如下:
1 #include <iostream>
2 #include <string>
3 #include <stack>
4
5 using namespace std;
6
7 //将串儿转换成十进制,相加得到的结果在转换为二进制
8
9 class Solution
10 {
11 public:
12 string addBinary(string a, string b)
13 {
14 int temp;//存储两数之和,十进制表示
15 int a_len = a.length();
16 int b_len = b.length();
17 string result = "";
18 if (a == "0")
19 result = b;
20 else if (b == "0")
21 result = a;
22 else
23 {
24 //二进制转十进制
25 int a_10 = 0;
26 int b_10 = 0;
27 for (int i = 0; i < a_len; i++)
28 a_10 += ((a[i] - ‘0‘) * exp2(a_len - 1 - i));
29 for (int j = 0; j < b_len; j++)
30 b_10 += ((b[j] - ‘0‘) * exp2(b_len - 1 - j));
31 temp = a_10 + b_10;
32
33 //十进制转二进制
34 stack<int> space;//存放二进制的倒序
35 while (temp>0)
36 {
37 space.push(temp % 2);
38 temp /= 2;
39 }
40
41 //将栈内的数据,倒出来(顺序就正了)
42 while (!space.empty())
43 {
44 result += (space.top() + ‘0‘);
45 space.pop();
46 }
47 }
48 return result;
49 }
50 };
51
52 int main()
53 {
54 string a = "0";
55 string b = "0";
56 string result;
57 Solution sol;
58 result = sol.addBinary(a, b);
59 cout << result << endl;
60
61 int u;
62 cin >> u;
63
64 return 0;
65 }
原文:https://www.cnblogs.com/pgzhanglin/p/13281307.html