【算法专题训练】02、二进制

1、二进制

在计算机中所有的数据都采用二进制方式存储与表示,二进制是指数字的每位都是0和1,现实中我们都采用10进制来进行计算,在计算机中则需要将10进制的数字转换成2进制,例如我们常见的数字10,在计算中二进制表示方式为1010.
位运算

位运算是把数字用二进制形式表示之后,对每位上0或1的运算。

  • 6种位运算方式:非、与、或、异或、左移和右移

2、LCR02-二进制求和

  • 题目
cpp 复制代码
给定两个 01 字符串 a 和 b ,请计算它们的和,并以二进制字符串的形式输出。
输入为 非空 字符串且只包含数字 1 和 0。

示例:
输入: a = "1010", b = "1011"
输出: "10101"
  • 代码实现
cpp 复制代码
思路:
 * - 遍历两个字符串,从末尾往前遍历,两两相加,超过了字符串长度的为0,
 * - 相加过程需要考虑进位情况
 * - 将相加后的结果,存在在字符串中,使用append增加单个字符,最后翻转字符串得到最终结果
 string addBinary(string a, string b)
{
    std::cout << "a:" << a << " ,b:" << b << std::endl;
    int aLen = a.length();
    int bLen = b.length();

    int i = a.length() - 1;
    int j = b.length() - 1;
    int space = 0; // 进位

    string result = "";
    while (i >= 0 || j >= 0)
    {
        int aNum = i < 0 ? 0 : a[i] - '0';
        int bNum = j < 0 ? 0 : b[j] - '0';
        int sum = aNum + bNum + space;
        space = sum / 2;
        sum = sum % 2;

        result.append(std::to_string(sum));
        i--;
        j--;
    }
    if (space != 0)
    {
        result.append(std::to_string(space));
    }
    // std::reverse(result.begin(), result.end());
    // 字符串对调,遍历字符串,长度为len/2,对前后对称部分的字符进行交换
    int len = result.length();
    for (int i = 0; i < len / 2; i++)
    {
        char ch = result[i];
        result[i] = result[len - 1 - i];
        result[len - 1 - i] = ch;
    }
    return result;
}

3、总结

  • 思路总结:输入的是二进制形式的字符串,要相加得从右边末尾开始计算,所以字符串从右边往左开始遍历获取单个二进制字符,然后进行加法运算,注意有进位
  • 获取字符串的长度len,拿到最右边位置len-1的字符,两个字符串不断往左遍历,遍历到的字符减去'0'得到对应的整数值,当其中有一个字符串遍历到最左边字符后,继续遍历的结果值为0
  • 二进制数值计算,注意加上进位值,并将结果值保存到字符串中
  • 再遍历完后,需要判断进位值是否等于1,为1需要保存到字符串结果中
  • 最后将结果字符串翻转处理
相关推荐
橙露5 小时前
Spring Boot 核心原理:自动配置机制与自定义 Starter 开发
java·数据库·spring boot
晚霞的不甘5 小时前
Flutter for OpenHarmony 可视化教学:A* 寻路算法的交互式演示
人工智能·算法·flutter·架构·开源·音视频
小程故事多_805 小时前
Agent Infra核心技术解析:Sandbox sandbox技术原理、选型逻辑与主流方案全景
java·开发语言·人工智能·aigc
冰暮流星5 小时前
sql语言之分组语句group by
java·数据库·sql
沐知全栈开发5 小时前
SQL 日期处理指南
开发语言
望舒5135 小时前
代码随想录day25,回溯算法part4
java·数据结构·算法·leetcode
黎雁·泠崖5 小时前
【魔法森林冒险】3/14 Allen类(一):主角核心属性与初始化
java·开发语言
黎雁·泠崖5 小时前
【魔法森林冒险】1/14 项目总览:用Java打造你的第一个回合制冒险游戏
java·开发语言
独好紫罗兰5 小时前
对python的再认识-基于数据结构进行-a006-元组-拓展
开发语言·数据结构·python
NuageL5 小时前
原始Json字符串转化为Java对象列表/把中文键名变成英文键名
java·spring boot·json