博客
关于我
(Leetcode-字符串-2) 字符串运算
阅读量:792 次
发布时间:2023-01-25

本文共 2370 字,大约阅读时间需要 7 分钟。

要实现一个字符串相加和字符串相乘的功能,这里将介绍两种常用的算法方案。以下内容将分为两部分:字符串加法和字符串乘法,每部分都将详细叙述实现方法和思路解析。

字符串加法

首先,讨论如何实现字符串的加法操作。假设给定的两个字符串分别为num1和num2,表示的非负整数需要进行相加。需要注意的是,字符串的长度不超过5100个字符,且字符串中不会包含前导零。具体实现思路如下:

  • 初始化一个长度足够大的结果字符串sum,长度等于max(num1.size(), num2.size()) + 1。确保sum能够存储所有位数。

  • 从字符串的末尾开始遍历,逐步将对应位置的数字相加。使用索引i遍历num1,索引j遍历num2,当前处理的位置为m = size -1。

  • 每次取出num1[i]和num2[j]中的数字,将它们相加并加上可能的进位mod。然后根据总和的大小决定当前位的值以及进位情况:a. 如果总和小于等于9,则将该位设置为总和的值,进位置0。b. 如果总和大于等于10,则将该位设置为总和减去10,进位置1。

  • 遍历完成后,如果还存在进位,则将其添加到结果的最高位。最后,去掉结果字符串前面的零,确保最终结果的正确性。

  • 以下是一个具体的实现示例:

    string addStrings(string num1, string num2) {    int size = max(num1.size(), num2.size()) + 1;    string sum(size, '0');    int i = num1.size() -1;    int j = num2.size()-1;    int m = size-1;    int mod = 0;    while (i >=0 || j >=0) {        int a = (i >=0) ? (num1[i--] - '0') : 0;        int b = (j >=0) ? (num2[j--] - '0') : 0;        int total = a + b + mod;        if (total <=9) {            sum[m--] = total + '0';            mod = 0;        } else {            sum[m--] = (total -10) + '0';            mod =1;        }    }    if (mod) {        sum[m++] = '1';    } else {        sum.erase(0, 1);    }    return sum;}

    字符串乘法

    接下来,我们将探讨如何实现字符串的乘法功能。给定的两个字符串num1和num2,它们表示的非负整数需要进行相乘。具体的实现思路如下:

  • 创建一个与长度相关的数组比如nums,来记录每一位的乘积结果。数组的长度设置为num1.size() + num2.size(),初始值为0。

  • 外层循环遍历num1中的每一位数字num1[i]。内层循环遍历num2中的每一位数字num2[j],计算这两个数字的乘积。将乘积结果加上从前一位循环中的进位mod,得到当前位的结果。然后将当前位的mod值作为下一位循环的进位。

  • 如果当前bit的乘积和进位的总和为0,则直接将其置为0。

  • 将计算完成后的数值写入对应的位置。

  • 最后,确定nums数组中最小的位数部分,将其设置为结果字符串。

  • 以下是具体实现代码示例:

    string multiply(string num1, string num2) {    int m = num1.size();    int n = num2.size();    vector
    nums(m + n, 0); for (int i = 0; i < m; ++i) { int mod = nums[i]; for (int j = 0; j < n; ++j) { int digit1 = (num1[m - i -1] - '0'); int digit2 = (num2[n -j -1] - '0'); int product = digit1 * digit2 + mod; nums[i +j] += product; nums[i +j] %= 10; mod = product / 10; } if (mod != 0) { nums[i + n] += mod; } } int size = nums.size(); string result(size, '0'); for (int i =0; i < m; ++i) { result[m + n -i -1] = nums[i] ==0 ? '0' : nums[i] + '0'; } return result;}

    以上展示了字符串加法和乘法的两种实现方案。在代码的实现过程中,我们采用逐位操作的方法,尽量避免了使用内置的BigInteger库或者直接转换字符串为整数值。通过这种方式我们能够有效地处理大数运算,将结果正确地输出到字符串中。

    转载地址:http://lkryk.baihongyu.com/

    你可能感兴趣的文章
    CentOS 7更换yum源
    查看>>
    CentOS 7 安装 postgreSQL 9.4
    查看>>
    centos 7安装docker
    查看>>
    CentOS 7 巨大变动之 systemd 取代 SysV的Init
    查看>>
    Centos 7 快速安装FTP服务
    查看>>
    centos 7 静态IP,指定DNS
    查看>>
    centos 7.3 启动mysql_centos7.3 搭建MySQL
    查看>>
    Centos 7.5 docker 容器怎么设置开机自启
    查看>>
    Centos 7.5 SSH改别的端口连接不上,只有默认端口才行(未解决)
    查看>>
    Centos 7.5 如何安装VMware Tools工具
    查看>>
    Centos 7.5 新磁盘创建和挂载XFS文件系统
    查看>>
    Centos 7.5安装safe-rm,防止rm -rf /命令误删除文件
    查看>>
    CentOS 7.X 系统安装及优化
    查看>>
    Centos 7下安装php+mysql+nginx+wordpress教程新版
    查看>>
    CentOS 7之Postfix部署系列 (一) CentOS安装
    查看>>
    flask框架面向移动端的虚拟物品订购平台毕设源码+论文
    查看>>
    flask框架飞机订票管理系统(毕设源码+论文)
    查看>>
    flask框架餐饮管理系统毕设源码+论文
    查看>>
    flask框架高性能教学资源平台设计与实现(毕设源码+论文)
    查看>>
    flask框架高校助学及勤工俭学管理系统(毕设源码+论文)
    查看>>