首页 > 编程语言 > 详细

力扣(LeetCode)试题67-二进制求和 C++代码

时间:2020-07-10 22:12:10      阅读:78      评论:0      收藏:0      [点我收藏+]

思路:这个还是要找规律,不能先转为十进制,相加后再转换为二进制,因为如果输入的二进制足够长,转换为十进制以后会溢出

因为我就是这么做的,提交时直接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 }

 

力扣(LeetCode)试题67-二进制求和 C++代码

原文:https://www.cnblogs.com/pgzhanglin/p/13281307.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!