最简单易懂的 大数相乘 解法
大数相乘
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
示例 1:
输入: num1 = "2", num2 = "3"
输出: "6"
示例 2:
输入: num1 = "123", num2 = "456"
输出: "56088"
说明:
num1 和 num2 的长度小于110。
num1 和 num2 只包含数字 0-9。
num1 和 num2 均不以零开头,除非是数字 0 本身。
不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。
思路方法
回顾多位数相乘原理:
容易发现 num1[i] * num2[j]
的结果会放到两个字符串相乘结果的 [i + j
, i + j + 1]
两个位置
设 num1 的长度为 len1, num2 的长度为 len2,则两数相乘结果长度最大为 len1+len2 ,先初始化长度为 len1+len2的数组,值全部为0
再用 两层循环计算出结果 的每一个位置上的值
var multiply = function(num1, num2) {var len1 = num1.length;var len2 = num2.length;var len = len1 + len2;var res = new Array(len);for (var i = 0; i < len; i++) {res[i] = 0;}if (num1 === "0" || num2 === "0") {return "0";}for (var i = len1 - 1; i >= 0; i--) {for (var j = len2 - 1; j >= 0; j--) {var mul = (num1[i] - "0") * (num2[j] - "0");var pos1 = i + j;var pos2 = i + j + 1;var sum = mul + res[pos2];//此处有坑,注意向下取整 javascript 的除号不是整除 是正常的除法res[pos1] += Math.floor(sum / 10);res[pos2] = sum % 10;}}//除去开头的0,将剩下的变成字符串var ans = "";for (var i = 0; i < len; i++) {if (res[i] !== 0) {for (var j = i; j < len; j++) {ans += res[j];}return ans;}}
};
最简单易懂的 大数相乘 解法相关推荐
- 算法题-大数相乘问题
今天在网上看到一个大数相乘的问题,题目是这样的:输入两个整数,要求输出这两个数的乘积.输入的数字可能超过计算机内整形数据的存储范围. 分析: 由于数字无法用一个整形变量存储,很自然的想到用字符串来表示 ...
- 历届试题 矩阵翻硬币 蓝桥杯 大数开方 大数相乘
历届试题 矩阵翻硬币 时间限制:1.0s 内存限制:256.0MB 问题描述 小明先把硬币摆成了一个 n 行 m 列的矩阵. 随后,小明对每一个硬币分别进行一次 Q 操作. 对第x行第y列的硬 ...
- 大数相乘、大数相加、大数相减Java版本
为什么80%的码农都做不了架构师?>>> 题目:两个非常大的数字相乘(相加,相减) 该题目在java中可以使用BigInteger类中的方法来实现.否则的话可以使用如下方式来实 ...
- 大数相乘--极简单的思路
大数相乘,面试常见的题型,如何计算两个打算相乘? <pre style="font-family: 'Lucida Sans Typewriter'; font-size: 12pt; ...
- C#中关于处理两个大数相乘的问题
方法一:直接利用.NET FrameWork 4.0中自带的System.Numeric类库 添加了对此类库的引用后,直接调用方法即可计算: View Code 1 BigInteger num1 = ...
- 大数相乘(c语言/c++)
大数相乘(c语言/c++) 方法一:做加法 方法二.做乘法 方法一:做加法 思路:模拟竖乘过程.将num2从后往前一个一个的去乘num1.然后累加.在累加的时候记得在末尾补0.补的0的个数就是第二个字 ...
- POJ 2389 Bull Math(水~Java -大数相乘)
题目链接:http://poj.org/problem?id=2389 题目大意: 大数相乘. 解题思路: java BigInteger类解决 o.0 AC Code: 1 import java. ...
- 面试官让你用C语言实现大数相乘,慌吗?
在之前的笔试题解析里面,我写了大数相加的问题,这里再剖析一个大数相乘,顾名思义,大数相乘就是这个数已经大到最大的数据类型都没有办法保存了. 我们看看最大的数据类型可以保存多大的数据. #include ...
- C# 使用同余代换简化多个大数相乘取模运算
•(A + B) mod M = ( A mod M + B mod M ) mod M •(A * B) mod M = ((A mod M) *( B mod M)) mod M using Sy ...
最新文章
- WDS Services Can't Start
- Xtrabackup备份、还原、恢复Mysql操作大全
- Python 0/1背包、动态规划
- 集成学习(ensemble learning)(三)
- glob在php中的意思,PHP函数glob介绍
- 小项目也可以学习到很多东西
- 吴恩达团队新研究!用MRNet进行膝关节磁共振影像诊断 已媲美医生 | 论文
- java 自定义异常实例分析_Java自定义异常类的实例详解
- android 音乐歌词接口,Android自定义View--仿QQ音乐歌词
- mysql on azure 链接_如何通过Python从Azure函数连接到azuremysql
- 【Sql查询数据】for 日、月、年
- OpenGL编程指南 示例笔记(2)--独立地移动光源
- 漏洞挖掘 符号执行_漏洞挖掘综述
- 中国移动的固网宽带不再免费,该项业务收入已与中国电信相当
- [TEST123] Performance Test
- 水色物语:清新水彩手绘插画技法
- adguard自定义_AdGuard-轻量级的全平台广告过滤工具
- vsphere client 60天问题
- 论文阅读:《A Neural Conversational Model》
- iPhone 4 实现 HTC Sense 时钟动画天气