力扣(LeetCode) ——43.字符串相乘(C++)


题目:字符串相乘

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
注意: 不能使用任何内置的 BigInteger 库或直接将输入转换为整数。

示例1:

输入: num1 = "2", num2 = "3"
输出: "6"

示例2:

输入: num1 = "123", num2 = "456"
输出: "56088"

解题思路:

  1. 判断num1与num2是否为0,有一个为0直接return 0;
  2. 初始化参数,计算两个字符串相乘的长度end1+end2
  3. 通过双重循环逐位计算,遍历第一个数的每一位与第二个数的每一位,计算乘积,并将结果累加到对应位置。
  4. 将累加后的中间结果转换为字符串,去除前导零,得到最终乘积。

最终代码:

cpp 复制代码
    string multiply(string num1, string num2) 
    {
    	//边界条件1:若任意一个乘数是"0",直接返回乘积"0"(0乘任何数为0)
        if(num1 == "0" || num2 == "0")
        {
            return "0";
        }
        int end1 = num1.size(), end2 = num2.size();
        vector<int> v(end1 + end2, 0);
        string ret = "";
        //外层循环:从num1的末尾(最低位)向前遍历(模拟竖式乘法从右往左算)
        for(int i = end1 - 1; i >= 0; i--)
        {
        	//将当前num1的字符转换为对应的数字(如'3' - '0' = 3)
            int n1 = num1[i] - '0';
            //内层循环:从num2的末尾(最低位)向前遍历
            for(int j = end2 - 1; j >= 0; j--)
            {
            	//将当前num2的字符转换为对应的数字
                int n2 = num2[j]-'0';
                //v[i+j+1] 是当前乘积对应的"个位"位置(因为i、j从末尾开始,索引偏移需+1)
                int tmp = v[i + j + 1] + n1 * n2;
                //取tmp的个位,存入容器对应位置(更新当前位的结果)
                v[i + j + 1] = tmp % 10;
                //取tmp的十位及以上(进位),存入容器的前一位(供下一轮累加)
                v[i + j] += tmp / 10;
            }
        }
        bool flag = true;
        //遍历
        for(int i = 0; i < v.size(); i++)
        {
        
            if(v[i] != 0 || !flag)
            {
            	//一旦遇到非零数字,后续不再跳过
                flag = false;
                //将数字转换为字符,存入结果字符串
                ret.push_back(v[i] + '0');
            }
        }
        return ret;
    }

赶紧动起手来吧!!!

点击下方即可跳转
字符串相乘

相关推荐
li1670902702 分钟前
第二十五章:C++11(下)
c语言·开发语言·数据结构·c++
承渊政道2 分钟前
【动态规划算法】(回文串问题解题框架与经典案例)
数据结构·c++·学习·算法·leetcode·动态规划·哈希算法
AI进化营-智能译站6 分钟前
ROS2 C++开发系列11-VS Code一键生成Doxygen注释|让ROS2节点文档自动跟上代码迭代
java·数据库·c++·ai
zhouwy1131 小时前
Linux文件系统与IO编程
linux·c++
We་ct5 小时前
LeetCode 5. 最长回文子串:DP + 中心扩展
前端·javascript·算法·leetcode·typescript
王老师青少年编程9 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【哈夫曼贪心】:合并果子
c++·算法·贪心·csp·信奥赛·哈夫曼贪心·合并果子
叼烟扛炮10 小时前
C++第二讲:类和对象(上)
数据结构·c++·算法·类和对象·struct·实例化
leoufung11 小时前
LeetCode 149: Max Points on a Line - 解题思路详解
算法·leetcode·职场和发展
样例过了就是过了11 小时前
LeetCode热题100 最长公共子序列
c++·算法·leetcode·动态规划
谭欣辰11 小时前
C++ 排列组合完整指南
开发语言·c++·算法