算法与数据结构(字符串相乘)

题目

思路

这道题我们可以使用竖式乘法,从右往左遍历每个乘数,将其相乘,并且把乘完的数记录在nums数组中,然后再进行进位运算,将同一列的数进行相加,进位。

解题过程

首先求出两个数组的长度,方便以后遍历。

判断若两个数组中有一个是0,则直接返回0。

然后定义last方便存储相乘后的数。

将num1与num2中的每一个数相乘,用nums记录相乘后得到的数。

接着进行进位运算,用flag记录进位的数。

从右往左遍历nums数组中的数。

这个函数是在0的位置插入一个元素,值为后面的,相当于不断地向前插入。

通过不断改变flag的值来实现向前进位。

最后判断,若最后一位仍有进位,则前插一个flag。

返回last字符串。

下面写了一个123*456的例子方便理解。

代码

cpp 复制代码
class Solution {
public:
    string multiply(string num1, string num2) {
        int len1=num1.length();
        int len2=num2.length();
        if(num1=="0" || num2 =="0")
            return "0";
        string last="";
        vector<int> nums(len1+len2);
        //用一个数组记录下来它们相乘得到的值
        for(int i=0;i<len1;i++)
        {
            for(int j=0;j<len2;j++)
            {
                nums[i+j] += (num1[i]-'0')*(num2[j]-'0');
            }
        }
        //做进位运算
        int flag = 0;
        for(int i=len1+len2-2;i>=0;i--)
        {
            last.insert(0, 1, (nums[i]+flag)%10 + '0');
            flag = (nums[i]+flag)/10;
        }
        if(flag!=0)
        last.insert(0, 1, flag + '0');
        return last;
    }
};
相关推荐
程序猿零零漆37 分钟前
《从入门到精通:蓝桥杯编程大赛知识点全攻略》(十一)-回文日期、移动距离、日期问题
java·算法·蓝桥杯
豆豆酱1 小时前
强化学习到大模型训练理论概要(一)
人工智能·算法
invincible_Tang1 小时前
贪心算法(题7)货仓选址
算法·贪心算法
点点滴滴的记录1 小时前
场景设计:设计一个分布式限流器,采用令牌桶算法,漏桶算法、滑动窗口算法实现
分布式·算法
敲上瘾4 小时前
DFS+回溯+剪枝(深度优先搜索)——搜索算法
数据结构·c++·算法·回归·深度优先·剪枝·回归算法
机器学习之心4 小时前
哪吒闹海!SCI算法+分解组合+四模型原创对比首发!SGMD-FATA-Transformer-LSTM多变量时序预测
算法·lstm·transformer·sci算法·分解组合·四模型原创对比首发
纪伊路上盛名在5 小时前
scRNA-seq scanpy教程1:准备工作+AnnData数据结构理解
数据结构·python·可视化·生物学·单细胞·scanpy
不学会Ⅳ5 小时前
Redis7.0八种数据结构底层原理
数据结构
大G哥5 小时前
Java中有100万个对象,用list map泛型存储和用list对象泛型存储,那个占用空间大,为什么...
java·开发语言·数据结构·windows·list
曙曙学编程5 小时前
进阶数据结构——单调队列
数据结构