栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

二进制求和

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

二进制求和

二进制求和

给你两个二进制字符串,返回它们的和(用二进制表示)。

输入为 非空 字符串且只包含数字 1 和 0。

示例 1:
	输入: a = "11", b = "1"
	输出: "100"

示例 2:
	输入: a = "1010", b = "1011"
	输出: "10101"

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/add-binary

解题思路:

  • 设置进位标志,模拟手算。
  • 先通过比较字符串长度与字符串拼接的方法将两个字符串长度调至相同。
  • 循环遍历运算字符串的每一位,并于进位标志结合起来。共有9种情况。
  • 将当前为结果push_back入结果字符串,运算结束后再将字符串翻转。

我的代码:

class Solution {
public:
    string addBinary(string a, string b) {
          string s0="";//存储字符串
          string s1="";//存储字符串
          string s2="";//存储结果
          //先将s0中添加两个字符串长度之差的个数个0
          //调整s0,s1字符串长度相等
          for(int i=0;ib.size()){
                s0.append(b);
                s1.append(a);
           }
           else{
                s0.append(a);
                s1.append(b);
           }
           int flag=0;//进位标识符,初始为0,无进位。
           for(int i=s0.size()-1;i>=0;--i){ //首选模拟进位
                if(s0[i]=='1' &&  s1[i]=='1'  && flag==1){
                    s2.push_back('1');
                    flag=1;
                }
                else if(s0[i]=='0' &&  s1[i]=='1'  && flag==1)
                {
                    s2.push_back('0');
                    flag=1;
                }
                else if(s0[i]=='1' &&  s1[i]=='0'  && flag==1)
                {
                    s2.push_back('0');
                    flag=1;
                }
                else if(s0[i]=='1' &&  s1[i]=='1'  && flag==0)
                {
                    s2.push_back('0');
                    flag=1;
                }         
                else if(s0[i]=='0' &&  s1[i]=='0'  && flag==1)
                {
                    s2.push_back('1');
                    flag=0;
                }
                else if(s0[i]=='0' &&  s1[i]=='1'  && flag==0)
                {
                    s2.push_back('1');
                    flag=0;
                }
                else if(s0[i]=='1' &&  s1[i]=='0'  && flag==0)
                {
                    s2.push_back('1');
                    flag=0;
                }
                else if(s0[i]=='0' &&  s1[i]=='0'  && flag==0)
                {
                    s2.push_back('0');
                    flag=0;
                }
          }
            if(flag==1) //最高位有进位,在向结果串中添加'1'
                s2.push_back('1');
        reverse(s2.begin(),s2.end());//翻转字符串
        return s2;
    }
};
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/938406.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号