55. 二进制之和 | 豆包MarsCode AI 刷题

150 阅读5分钟

这可能是目前所有题目当中最简单的困难题目了,于是就让我们说说吧

问题描述

小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'

计划: 将两个二进制字符串转换为十进制整数。 将两个十进制整数相加。 将结果转换为字符串并返回。

代码实现:

def solution(binary1, binary2):
    decimal1 = int(binary1, 2)
    decimal2 = int(binary2, 2)decimal_sum = decimal1 + decimal2
    return str(decimal_sum)

在Python当中,这么解题非常简单,因为这是大数处理题。
Python在处理大数和字符串操作方面比C语言更简单,主要有以下几个原因:

  1. 内置大数支持:Python的整数类型可以自动扩展到任意大小,而C语言的整数类型(如intlong)有固定的大小限制,处理大数时需要额外的库或手动实现大数运算。

  2. 丰富的标准库:Python提供了丰富的标准库函数,可以直接使用int函数将二进制字符串转换为十进制整数,而C语言需要手动实现这些转换。

  3. 简洁的语法:Python的语法更加简洁,代码更易读写。处理字符串和数字转换的代码在Python中通常更短、更直观。

  4. 自动内存管理:Python有自动内存管理(垃圾回收),而C语言需要手动管理内存,增加了编程的复杂性和出错的可能性。

综上所述,Python在处理大数和字符串操作时更为简便和高效。

那么这道题用C语言怎么解决呢?

// 将二进制字符串转换为十进制整数
long long solution(const char *binary) {
    long long decimal = 0;
    while (*binary) {
        decimal = (decimal << 1) + (*binary++ - '0');
    }
    return decimal;
}

// 将两个二进制字符串相加并返回十进制结果
char* add_binary_strings(const char *binary1, const char *binary2) {
    // 将二进制字符串转换为十进制整数
    long long decimal1 = binary_to_decimal(binary1);
    long long decimal2 = binary_to_decimal(binary2);

    // 将两个十进制整数相加
    long long decimal_sum = decimal1 + decimal2;

    // 将结果转换为字符串并返回
    char *result = (char *)malloc(21); // 假设结果不会超过20位
    sprintf(result, "%lld", decimal_sum);
    return result;
}

(ps:未经测试)

显然,这段C语言代码比Python复杂的多。他是从底层开始进行的二进制求和,而Python可以调用已有的库。虽然性能上远远不如C语言,但是在代码可读性和编写难度上,远远优于C语言。

让我们问问豆包MarsCode,C和Python的优缺点:

C 和 Python 是两种非常流行的编程语言,它们各自有不同的优缺点,适用于不同的场景。以下是它们的主要优缺点:

C 语言的优缺点

优点

  1. 性能高:C 语言是一种编译型语言,生成的机器码执行效率非常高,适合开发对性能要求极高的应用,如操作系统、嵌入式系统等。
  2. 控制力强:C 语言提供了对内存的直接访问和操作,开发者可以精确控制程序的每一个细节,适合开发底层系统软件。
  3. 跨平台:C 语言的标准库是跨平台的,编写的代码可以在不同的操作系统上编译运行。
  4. 广泛应用:C 语言是许多其他高级语言的基础,学习 C 语言有助于理解计算机底层工作原理。

缺点

  1. 开发效率低:C 语言的语法相对复杂,开发过程中需要手动管理内存,容易出现内存泄漏和指针错误,开发效率较低。
  2. 学习曲线陡峭:对于初学者来说,C 语言的指针、内存管理等概念较难理解,学习曲线较陡峭。
  3. 缺乏高级特性:C 语言缺乏现代编程语言中的一些高级特性,如垃圾回收、异常处理等,开发过程中需要手动处理许多细节。

Python 语言的优缺点

优点

  1. 开发效率高:Python 语法简洁,代码可读性强,开发效率高,适合快速开发原型和脚本。
  2. 丰富的库:Python 拥有庞大的标准库和第三方库,涵盖了数据分析、机器学习、Web 开发等多个领域,开发者可以快速实现复杂功能。
  3. 跨平台:Python 是解释型语言,代码可以在不同的操作系统上直接运行,无需重新编译。
  4. 易于学习:Python 语法简单,易于上手,适合初学者学习编程。

缺点

  1. 性能较低:Python 是解释型语言,执行效率较低,不适合开发对性能要求极高的应用。
  2. 全局解释器锁(GIL) :Python 的 GIL 限制了多线程程序的性能,不适合开发需要高并发处理的应用。
  3. 动态类型:Python 是动态类型语言,运行时类型检查会增加运行时开销,且容易出现类型错误。

总结

  • C 语言适合开发对性能要求极高、需要精确控制底层的应用,如操作系统、嵌入式系统等。
  • Python 语言适合快速开发原型、脚本、数据分析、机器学习等应用,开发效率高,但性能较低。