当前位置: 首页 > news >正文

字节青训-二进制之和

问题描述

小U和小R喜欢探索二进制数字的奥秘。他们想找到一个方法,将两个二进制字符串相加并以十进制的形式呈现。这个过程需要注意的是,他们的二进制串可能非常长,所以常规的方法可能无法处理大数。小U和小R希望你帮助他们设计一个算法,该算法能在保证时间复杂度不超过O(n^2)的前提下,返回两个二进制字符串的十进制求和结果。

 

测试样例

样例1:

输入:binary1 = "101" ,binary2 = "110"
输出:'11'

样例2:

输入:binary1 = "111111" ,binary2 = "10100"
输出:'83'

样例3:

输入:binary1 = "111010101001001011" ,binary2 = "100010101001"
输出:'242420'

样例4:

输入:binary1 = "111010101001011" ,binary2 = "10010101001"
输出:'31220'

样例5:

输入:binary1 = "11" ,binary2 = "1"
输出:'4'

解题思路:

题目要求并不复杂,就是所谓的二进制转十进制相加,只不过需要考虑到长度的问题,其余地方我觉得没有需要注意的了

 整个逻辑下来就是用一个循环是遍历这个二进制字符串,并判断有没有进位,也就是说,循环条件为:如果两个字符串有一个还没遍历完或者有进位,都要继续计算下去,最后我们将结果重新转换成字符串返回即可,值得一提的是最终的结果需要进行反转,因为一开始处理是从字符串尾部开始的。

最终代码:

python:
def solution(a: str, b: str) -> str:result = []carry = 0  # 进位i, j = len(a) - 1, len(b) - 1while i >= 0 or j >= 0 or carry:sum_ = carry  # 先将进位加上if i >= 0:sum_ += int(a[i])  # 将字符转换为数字i -= 1if j >= 0:sum_ += int(b[j])  # 将字符转换为数字j -= 1carry = sum_ // 2  # 计算新的进位result.append(str(sum_ % 2))  # 结果取余,转换为字符result.reverse()  # 反转结果binary_result = ''.join(result)decimal_sum = int(binary_result, 2)return str(decimal_sum)# 测试代码
print(solution("101", "110") == "11")           # 二进制和 = "1011" = 11(十进制)
print(solution("111111", "10100") == "83")      # 二进制和 = "1010011" = 83(十进制)
print(solution("111010101001001011", "100010101001") == "242420")  # 二进制和 = "111011001101000100" = 242420(十进制)
print(solution("111010101001011", "10010101001") == "31220")       # 二进制和 = "111100110001100" = 31220(十进制)

c++:

 

#include <bits/stdc++.h>using namespace std;// 函数用于二进制字符串的加法
string addBinary(const string &a, const string &b) {string result;int carry = 0;  // 进位int i = a.size() - 1;int j = b.size() - 1;while (i >= 0 || j >= 0 || carry) {int sum = carry; // 先将进位加上if (i >= 0) {sum += a[i] - '0'; // 将字符转换为数字i--;}if (j >= 0) {sum += b[j] - '0'; // 将字符转换为数字j--;}carry = sum / 2; // 计算新的进位result.push_back((sum % 2) + '0'); // 结果取余,转换为字符}reverse(result.begin(), result.end()); // 反转结果long long decimalSum = stoll(result, 0, 2);return to_string(decimalSum);
}// 主函数int main() {// You can add more test cases herestd::cout << (addBinary("101", "110") == "11") << std::endl;std::cout << (addBinary("111111", "10100") == "83") << std::endl;std::cout << (addBinary("111010101001001011", "100010101001") == "242420") << std::endl;std::cout << (addBinary("111010101001011", "10010101001") == "31220") << std::endl;return 0;
}

 

 最终也是成功通过啦


http://www.mrgr.cn/news/61208.html

相关文章:

  • C#中通道(Channels)的应用之(生产者-消费者模式)
  • 网络协议(八):IP 协议
  • FPGA的 基本结构(Xilinx 公司Virtex-II 系列FPGA )
  • 汇总统计数据--SQL中聚集函数的使用
  • 【Linux】Linux基础命令(二)
  • 《自动驾驶与机器人中的SLAM技术》ch2:基础数学知识
  • App Inventor 2 列表显示框能否实现多选?
  • 此版本的IDM不支持该类下载,请尝试将IDM更新至最新版本
  • Linux高级命令
  • 数据结构初阶———顺序表
  • 智能防泄密:源代码保护的创新选择
  • 驱动和芯片设计哪个难
  • Hash表算法
  • HelloCTF [RCE-labs] Level 8 - 文件描述和重定向
  • JVM垃圾回收
  • 探索工业大模型的奥秘:2024年中国工业大模型行业发展研究报告免费下载
  • @Import
  • MySQL系列---sql优化
  • qq流量分析(渗透课作业)
  • PBKDF2算法:一种基于密码的密钥派生算法
  • VQ-VAE(2018-05:Neural Discrete Representation Learning)
  • png怎么转换成jpg格式?将png格式转换成jpg格式的几个方法推荐
  • 21世纪20年代了, 居然遭遇扩容U盘!
  • Jenkins+RobotFramework 失败用例重执行方案
  • 串口调试工具
  • 人工智能图谱