首页 > 试题广场 >

大数乘法

[编程题]大数乘法
  • 热度指数:29084 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
以字符串的形式读入两个数字,编写一个函数计算它们的乘积,以字符串形式返回。

数据范围: 读入的数字大小满足 

要求:空间复杂度 O(m),时间复杂度 O(m^2)假设m是n的长度
示例1

输入

"11","99"

输出

"1089"

说明

11*99=1089 
示例2

输入

"1","0"

输出

"0"
头像 江南好___
发表于 2021-07-14 22:13:33
精华题解 描述 题目描述 以字符串的形式读入两个数字,编写一个函数计算它们的乘积,以字符串形式返回。 (字符串长度不大于10000,保证字符串仅由'0'~'9'这10种字符组成) 示例 输入:"11","99" 返回值:"1089" 说明:11*99 展开全文
头像 牛一霸
发表于 2021-07-05 12:25:08
精华题解 题目:大数乘法 描述:以字符串的形式读入两个数字,编写一个函数计算它们的乘积,以字符串形式返回。 (字符串长度不大于10000,保证字符串仅由'0'~'9'这10种字符组成) 示例1:输入:"11","99",返回值:"1089&q 展开全文
头像 漫漫云天自翱翔
发表于 2021-07-06 14:35:38
精华题解 题解一:普通竖式法 题解思路: 模拟拆分乘法竖式,遍历t,每次相乘之和末位补n-1-i个零之后,与之前的值相加 图示:复杂度分析: 时间复杂度:O(MN+N^2): M为s的长度,N为t的长度,中间存储字符串最长为(M+N),需要乘以N次,所以字符串相加次数也为N。所以时间复杂 展开全文
头像 如也201810022128875
发表于 2021-07-18 21:16:59
精华题解 题目描述 以字符串的形式读入两个数字,编写一个函数计算它们的乘积,以字符串形式返回。 (字符串长度不大于10000,保证字符串仅由'0'~'9'这10种字符组成) 方法一: 模拟 解题思路 用代码模拟2个数相乘的过程即可。整体的流程就是:把 num2 从右往左遍历,每一个数字和 num1 进行相乘 展开全文
头像 LifelongCode
发表于 2021-01-05 10:41:09
将输入的两个大数以字符串的形式存储,然后转化成整型数组存储,通过整型数组进行乘法运算(采用分治的思想)即乘法分配律,如AB*CD=AC(AD+BC)BD,将两个数组逐位相乘的结果对位存放在新的数组里,再对新数组进行进位判定,进位结束后将新数组转化成字符串输出。 import java.util.* 展开全文
头像 牛客516598323号
发表于 2020-09-11 11:05:08
使用不进位的长乘法进行计算,然后依次进位,注意数组顺序颠倒和首段多出的0。用例通过率: 100.00% 运行时间: 30ms 占用内存: 6520KB。 # # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # @param s string字符串 第一个整数 # @ 展开全文
头像 我和我
发表于 2022-01-01 16:07:42
public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param s string字符串 第一个整数 * @param t string字符串 第二个整数 展开全文
头像 牛客362459853号
发表于 2021-11-20 00:02:20
问题描述:  以字符串的形式读入两个数字,编写一个函数计算它们的乘积,以字符串形式返回。 数据范围: 读入的数字大小满足0≤n≤101000 要求:空间复杂度 O(n),时间复杂度 O(n2) 问题分析:两个数相乘 展开全文
头像 阿尼亚瓦库瓦库
发表于 2021-06-22 22:45:32
使用java的库函数BigInteger: public String solve (String s, String t) {          展开全文
头像 白羊兔
发表于 2021-10-13 03:29:56
import java.util.*; import java.math.BigInteger; //懒人解法 public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @p 展开全文
头像 ivansli
发表于 2021-04-25 21:06:45
go + 数组 以 123 * 456 为例 输入: num1 = "123", num2 = "456" 输出: "56088" 参考 leetcode https://leetcode-cn.com/problems/multiply-s 展开全文
头像 OfferCall!
发表于 2021-04-01 10:17:56
借助数组,数组长度设置为二者相乘之后可能产生的最长的位数,即二者位数之和。然后按照乘法规则,逐个位置相乘,求出保留数和进位。一次整体的内循环过程就是求一个中间结果的过程,外循环遍历完,则所有的中间结果也就求完了。最终还需要判断最后的进位变量是否不为0,如果不为0,需要添加到最高位。 publ 展开全文
头像 宇宙小超人
发表于 2022-04-12 15:09:19
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param s string字符串 第一个整数 * @para 展开全文
头像 你今天学到了啥
发表于 2022-10-15 15:15:00
Python3复现算法书上的分治法,两个相乘的数A,B可以分解为 (A1*10^(n/2)+A2)*(B1*10^(n/2)+B2)=10^n*A1*B1+10^(n/2)*(A1*B2+A2*B1)+A2*B2  ,(1) 其中A1*B2+A2*B1=(A1+A2)*(B1+ 展开全文

问题信息

难度:
78条回答 8986浏览

热门推荐

通过挑战的用户

查看代码