c++二进制转换

给你两个二进制字符串 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.  首先,我们需要将两个输入字符串的长度补齐,使得它们的长度相等。如果某个字符串长度较短,我们可以在该字符串的左侧插入适当数量的字符 '0',使其与另一个字符串长度相等。
创建一个变量 carry,用于表示进位值,初始值为 0。
2. 从右往左遍历两个输入字符串的每一位:
将当前位转换为整数,并与另一个字符串的对应位以及进位值相加,得到当前位的和 sum。
将 sum 对2取余,得到当前位的结果(0或1)。
将结果转换为字符后,将其放置在结果字符串的最左侧。
3.  更新进位值 carry,将 sum 除以 2 的商赋值给 carry。
如果遍历完成后 carry 的值大于 0,则表示有进位,将字符 '1' 放置在结果字符串的最左侧。
最终,我们得到的结果就是两个二进制字符串的和。


解题方法
从右往左遍历两个二进制数,逐位相加,同时考虑进位的情况。具体地,对于两个二进制数的同一位,如果它们的和小于等于1,则直接将其加入结果字符串中;否则,将其减去2后加入结果字符串,并记录下一位的进位。
如果有一个二进制数已经遍历完了,那么我们只需要将另一个二进制数剩余的部分以及进位依次加入结果字符串即可。
将得到的结果字符串反转,就得到了两个二进制数的和。

class Solution {
public:
    string addBinary(string a, string b) {
        // 将较短的字符串前面补0,使得两个字符串长度相等
        if (a.length() >= b.length()) {
            b.insert(0, a.length() - b.length(), '0');
        } else {
            a.insert(0, b.length() - a.length(), '0');
        }
        
        int len = max(a.length(), b.length()); // 字符串的长度
        int carry = 0; // 进位
        for (int i = len - 1; i >= 0; i--) {
            int sum = a[i] - '0' + b[i] - '0' + carry; // 当前位的和
            a[i] = (sum) % 2 + '0'; // 更新当前位的值为sum模2的结果
            carry = sum / 2; // 计算进位
        }
        
        if (carry > 0) {
            a = '1' + a; // 如果最高位有进位,将进位加在最高位
        }
        
        return a;
    }
};


————————————————
版权声明:本文为优快云博主「冷yan~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/jgk666666/article/details/132839824

C++中,二进制转换函数通常用于将整数转换二进制字符串,或者将二进制字符串转换回整数。以下是一些常用的二进制转换函数示例: 1. **整数二进制字符串**: ```cpp #include <iostream> #include <string> #include <algorithm> std::string intToBinary(int n) { std::string binary = ""; while (n > 0) { binary += (n % 2) ? '1' : '0'; n /= 2; } std::reverse(binary.begin(), binary.end()); return binary; } int main() { int num = 10; std::string binary = intToBinary(num); std::cout << "Binary representation of " << num << " is " << binary << std::endl; return 0; } ``` 2. **二进制字符串整数**: ```cpp #include <iostream> #include <string> #include <cmath> int binaryToInt(const std::string& binary) { int n = 0; for (char bit : binary) { n = n * 2 + (bit - '0'); } return n; } int main() { std::string binary = "1010"; int num = binaryToInt(binary); std::cout << "Integer representation of " << binary << " is " << num << std::endl; return 0; } ``` 3. **使用标准库函数进行转换**: C++标准库提供了`std::bitset`类,可以方便地进行二进制与整数的转换。 ```cpp #include <iostream> #include <bitset> #include <string> int main() { int num = 10; std::string binary = std::bitset<8>(num).to_string(); // 转换为8位二进制 std::cout << "Binary representation of " << num << " is " << binary << std::endl; std::string binaryStr = "1010"; int number = std::bitset<8>(binaryStr).to_ulong(); std::cout << "Integer representation of " << binaryStr << " is " << number << std::endl; return 0; } ``` 这些示例展示了如何在C++中进行二进制与整数的转换。根据具体需求,可以选择使用自定义函数或标准库函数。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值