首页 > 其他分享 >67. 二进制求和

67. 二进制求和

时间:2024-09-06 22:25:22浏览次数:10  
标签:string 二进制 sum ans 求和 result 67 carry size

67. 二进制求和

给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。

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

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

提示:
1 <= a.length, b.length <= 104
a 和 b 仅由字符 ‘0’ 或 ‘1’ 组成
字符串如果不是 “0” ,就不含前导零

解题思路
这道题目本质上和高精度除法高精度乘法高精度加减法是一类题,都是关于大数的加减模拟的,是个高精度问题。
下面是对于本题目的思考 :

  1. 确定循环次数

    • n = max(|a|, |b|),其中 |a||b| 分别表示二进制数 ab 的位数。
    • 循环 n 次,从最低位开始遍历。
  2. 初始化进位

    • 使用一个变量 carry 表示上一个位置的进位,初始值为 0
  3. 逐位计算

    • 记当前位置对应的两个位为 a_ib_i
    • 每一位的答案为 (carry + a_i + b_i) % 2
    • 下一位的进位为 ⌊(carry + a_i + b_i) / 2⌋
  4. 重复步骤

    • 重复上述步骤,直到数字 ab 的每一位计算完毕。
  5. 处理最高位进位

    • 最后如果 carry 的最高位不为 0,则将最高位添加到计算结果的末尾。
class Solution {
public:
    string addBinary(string a, string b) {
    string result;     
    int carry = 0;     
    int i = a.size() - 1;     
    int j = b.size() - 1;     
    while (i >= 0 || j >= 0 || carry > 0) {     
        int sum = carry;     
        if (i >= 0) sum += a[i--] - '0';     
        if (j >= 0) sum += b[j--] - '0';     
        result.push_back((sum % 2) + '0');       
        carry = sum / 2;       
    }
    reverse(result.begin(), result.end());       
    return result;            
    }
};

下面的代码就是为了多了解一下C++中stl,当个开阔知识面的吧

  • size_t 是一个无符号整数类型,用于表示内存大小或数组索引。
  • 它通常用于确保在处理内存大小和数组索引时不会出现负数,并且能够处理非常大的内存块。
  • 在循环、函数参数、返回值等场景中都可以使用 size_t
  • std::string::at 函数用于访问字符串中的特定字符,提供了边界检查。
  • 如果访问的索引超出字符串范围,at 函数会抛出 std::out_of_range 异常。
  • [] 运算符相比,at 函数更安全,因为它在运行时进行边界检查。
class Solution {
public:
    string addBinary(string a, string b) {
        string ans;
        reverse(a.begin(), a.end());
        reverse(b.begin(), b.end());

        int n = max(a.size(), b.size()), carry = 0;
        for (size_t i = 0; i < n; ++i) {
            carry += i < a.size() ? (a.at(i) == '1') : 0;
            carry += i < b.size() ? (b.at(i) == '1') : 0;
            ans.push_back((carry % 2) ? '1' : '0');
            carry /= 2;
        }

        if (carry) {
            ans.push_back('1');
        }
        reverse(ans.begin(), ans.end());

        return ans;
    }
};

标签:string,二进制,sum,ans,求和,result,67,carry,size
From: https://blog.csdn.net/weixin_46006714/article/details/141970150

相关文章

  • 【C++编程题】格雷码与自然二进制码转换
        格雷码是数字信号处理中常用编码方式。格雷码中任意两个相邻代码的二进制位中只有一位不同,对于最大编码和最小编码也成立。1.异或法转换1.1二进制码转格雷码二进制码转格雷码[1]1)将二进制最高位保留;2)对于二进制码中剩余的任意第i位,将其与......
  • 洛谷题单指南-常见优化技巧-P3467 [POI2008] PLA-Postering
    原题链接:https://www.luogu.com.cn/problem/P3467题意解读:用长方形的海报覆盖建筑的侧面,最少需要的海报数如上图,左边最少需要3张,右边最少需要4张解题思路:可以看出,需要海报数与建筑宽度无关,只与高度有关。当建筑高度与之前不同时,肯定需要增加一张海报;当建筑高度与之前有相同......
  • MySQL 源码|67 - 语法解析(V2):数值字面值|V20240905
    目录文档:MySQL源码|源码剖析文档目录源码位置(版本=MySQL8.0.37):/sql/sql_yacc.yy前置文档:MySQL源码|33-语法解析:bison基础语法规则根据MySQL源码|21-词法解析:状态转移逻辑梳理中梳理的MySQL词法解析逻辑,有如下终结符与数值相关:终结符名称终结符表示内容NUM......
  • Python如何对列表内的数字求和?
    Python列表是一种有序、可变的数据结构,可以包含不同类型的数据,如数字、字符串等。而在Python中,将列表中的数据求和是一个常见操作,那么如何对Python列表中的数字进行求和?我们通过这篇文章来介绍一下方法。Python中有几种方法可以对列表内的数字求和:1、使用内置函数......
  • Monocle:一款基于LLM的二进制文件自然语言搜索工具
    关于MonocleMonocle是一款基于LLM的二进制文件自然语言搜索工具,该工具由LLM驱动,用于对已编译的目标二进制文件执行自然语言搜索,并查找加密代码、密码字符串和安全缺陷漏等。功能介绍Monocle是一款由大型语言模型支持的工具,用于对已编译的目标二进制文件执行自然语言搜索......
  • 1. GIS开发工程师岗位职责、技术要求和常见面试题
    本系列文章目录:1.GIS开发工程师岗位职责、技术要求和常见面试题2.GIS数据工程师岗位职责、技术要求和常见面试题3.GIS后端工程师岗位职责、技术要求和常见面试题4.GIS前端工程师岗位职责、技术要求和常见面试题5.GIS工程师岗位职责、技术要求和常见面试题6.GIS......
  • 5. GIS工程师岗位职责、技术要求和常见面试题
    本系列文章目录:1.GIS开发工程师岗位职责、技术要求和常见面试题2.GIS数据工程师岗位职责、技术要求和常见面试题3.GIS后端工程师岗位职责、技术要求和常见面试题4.GIS前端工程师岗位职责、技术要求和常见面试题5.GIS工程师岗位职责、技术要求和常见面试题6.GIS......
  • 一图看懂天润云(2167.HK)2024年中期业绩
    ......
  • 信息学奥赛初赛天天练-82-NOIP2014普及组-完善程序-机器语言、汇编语言、高级语言、计
    1NOIP2014普及组基础题11以下哪个是面向对象的高级语言()A汇编语言BC++CFortranDBasic2TB代表的字节数是()A2的10次方B2的20次方C2的30次方D2的40次方3二进制数00100100和00010101的和是()A00101000B001010......
  • https://www.bilibili.com/video/BV1Bg41167W5/ 突破英语听力口语瓶颈20|掌握5种弱读,不
    functionwordsArticles(the,a/an)Auxiliaries(can,must,might,will)Demonstratives(this,these,that,those)Quantifiers(many,few,little,some)Prepositions(on,with,to,from)Pronouns(he,she,they,we)Conjunctions(and,but,or,but) 1.ReducingConjunction弱读连词......