(Leetcode-字符串-2) 字符串运算
发布日期:2025-03-30 23:08:31 浏览次数:8 分类:精选文章

本文共 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库或者直接转换字符串为整数值。通过这种方式我们能够有效地处理大数运算,将结果正确地输出到字符串中。

    上一篇:047:cesium加载geojson文件,显示图形
    下一篇:(ios实战)单个ViewControl适配不同ios版本xib文件实现

    发表评论

    最新留言

    第一次来,支持一个
    [***.219.124.196]2025年05月01日 10时49分43秒