文章目录
- 题目链接:
- 题目描述:
- 解法
- C++ 算法代码:
题目链接:
67. 二进制求和
题目描述:
解法
高精度加法
解法:模拟列竖式运算
C++ 算法代码:
class Solution
{
public:string addBinary(string a, string b) {// 二进制字符串相加算法// 基本思路:从右到左(低位到高位)逐位相加,处理进位,类似于手工计算string ret; // 存储结果的字符串int cur1 = a.size() - 1; // 指向字符串a的最后一位(最低位)int cur2 = b.size() - 1; // 指向字符串b的最后一位(最低位)int t = 0; // 进位值,初始为0// 循环条件:只要a、b还有位没处理完,或者还有进位,就继续计算while(cur1 >= 0 || cur2 >= 0 || t){// 如果a还有未处理的位,将其转为数字并加入当前位的计算// 注意:字符'0'的ASCII值是48,'1'的ASCII值是49,所以减去'0'可以得到数字值if(cur1 >= 0) t += a[cur1--] - '0';// 如果b还有未处理的位,将其转为数字并加入当前位的计算if(cur2 >= 0) t += b[cur2--] - '0';// 当前位的结果是t对2取余(0或1),加上'0'转回字符ret += t % 2 + '0';// t除以2得到进位值(0或1)t /= 2;}// 由于计算是从低位到高位,但添加到ret是从左到右,所以需要反转结果reverse(ret.begin(), ret.end());return ret;}
};