力扣每日一题43:字符串相乘

题目描述:

给定两个以字符串形式表示的非负整数 num1num2,返回 num1num2 的乘积,它们的乘积也表示为字符串形式。

**注意:**不能使用任何内置的 BigInteger 库或直接将输入转换为整数。

示例 1:

复制代码
输入: num1 = "2", num2 = "3"
输出: "6"

示例 2:

复制代码
输入: num1 = "123", num2 = "456"
输出: "56088"

提示:

  • 1 <= num1.length, num2.length <= 200
  • num1num2 只能由数字组成。
  • num1num2 都不包含任何前导零,除了数字0本身。

通过次数

316.8K

提交次数

713.9K

通过率

44.4%

思路和题解:

不能使用任何内置的 BigInteger 库或直接将输入转换为整数,那就只能用数组来模拟数字乘法,也就是小学生的竖式乘法。我们来回忆一下小学生竖式乘法是怎么做的。

先看第一种,每次两个位数乘完后加上上一次的进位,然后保留余数,记下进位。然后再把乘数a的整体和乘数b每位相乘的结果相加。相加时的进位方式和相乘时一样。直接看图你就懂了。

再来看第二种,相乘和相加的时候都不考虑进位,等乘法和加法都做完后再考虑进位,看图你就懂了。

代码:

我用的是第二种方法,先乘法和加法都做完后再搞进位,这样可以不用边乘边加边进位,操作步骤简单些,好写。

复制代码
class Solution {
public:
    string multiply(string num1, string num2) {
        if(num1=="0"||num2=="0")
            return "0";
        int m=num1.size(),n=num2.size();
        string ans;
        vector<int> ansArr(m+n);
        int i,j;
        //相乘
        for(i=m-1;i>=0;i--)
        {
            int x=num1[i]-'0';
            for(j=n-1;j>=0;j--)
            {
                int y=num2[j]-'0';
                ansArr[i+j+1]+=x*y;//照理来说是[i+j],但是[0]的位置要先留着存储最后一个进位,所以向前移一步

            }
        }
        //进位
        for(i=m+n-1;i>0;i--)
        {
            ansArr[i-1]+=ansArr[i]/10;
            ansArr[i]%=10;
        }
        //int数组转换为string
        i=ansArr[0]==0?1:0;
        while(i<m+n)
        {
            ans.push_back(ansArr[i]+'0');//不能用ans[i]=ansArr[i]+'0',这样没用。
            i++;
        }
        return ans;
    }
};
相关推荐
CoderYanger1 天前
递归、搜索与回溯-穷举vs暴搜vs深搜vs回溯vs剪枝:12.全排列
java·算法·leetcode·机器学习·深度优先·剪枝·1024程序员节
Coder-coco1 天前
在线商城系统|基于springboot vue在线商城系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·宠物
Slow菜鸟1 天前
Java开发规范(八)| 安全规范—企业级应用的“架构级底线”
java·开发语言·安全
憨憨崽&1 天前
进击大厂:程序员必须修炼的算法“内功”与思维体系
开发语言·数据结构·算法·链表·贪心算法·线性回归·动态规划
7***68431 天前
Spring Boot 热部署
java·spring boot·后端
毕设源码-邱学长1 天前
【开题答辩全过程】以 基于Java的公职备考在线学习系统的设计与实现为例,包含答辩的问题和答案
java·开发语言·学习
chem41111 天前
C 语言 函数指针和函数指针数组
c语言·数据结构·算法
Croa-vo1 天前
Tesla Spring 2026 Co-op 面经:CodeSignal真题解析与通关攻略
java·后端·spring
C***u1761 天前
【springboot】Spring 官方抛弃了 Java 8!新idea如何创建java8项目
java·spring boot·spring
CodeAmaz1 天前
Spring 事务失效的 8 种常见场景总结
java·spring·事务失效