大数相乘

给定两个以字符串形式表示的非负整数 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. 算法题-大数相乘问题

    今天在网上看到一个大数相乘的问题,题目是这样的:输入两个整数,要求输出这两个数的乘积.输入的数字可能超过计算机内整形数据的存储范围. 分析: 由于数字无法用一个整形变量存储,很自然的想到用字符串来表示 ...

  2. 历届试题 矩阵翻硬币 蓝桥杯 大数开方 大数相乘

    历届试题 矩阵翻硬币   时间限制:1.0s   内存限制:256.0MB 问题描述 小明先把硬币摆成了一个 n 行 m 列的矩阵. 随后,小明对每一个硬币分别进行一次 Q 操作. 对第x行第y列的硬 ...

  3. 大数相乘、大数相加、大数相减Java版本

    为什么80%的码农都做不了架构师?>>>    题目:两个非常大的数字相乘(相加,相减) 该题目在java中可以使用BigInteger类中的方法来实现.否则的话可以使用如下方式来实 ...

  4. 大数相乘--极简单的思路

    大数相乘,面试常见的题型,如何计算两个打算相乘? <pre style="font-family: 'Lucida Sans Typewriter'; font-size: 12pt; ...

  5. C#中关于处理两个大数相乘的问题

    方法一:直接利用.NET FrameWork 4.0中自带的System.Numeric类库 添加了对此类库的引用后,直接调用方法即可计算: View Code 1 BigInteger num1 = ...

  6. 大数相乘(c语言/c++)

    大数相乘(c语言/c++) 方法一:做加法 方法二.做乘法 方法一:做加法 思路:模拟竖乘过程.将num2从后往前一个一个的去乘num1.然后累加.在累加的时候记得在末尾补0.补的0的个数就是第二个字 ...

  7. POJ 2389 Bull Math(水~Java -大数相乘)

    题目链接:http://poj.org/problem?id=2389 题目大意: 大数相乘. 解题思路: java BigInteger类解决 o.0 AC Code: 1 import java. ...

  8. 面试官让你用C语言实现大数相乘,慌吗?

    在之前的笔试题解析里面,我写了大数相加的问题,这里再剖析一个大数相乘,顾名思义,大数相乘就是这个数已经大到最大的数据类型都没有办法保存了. 我们看看最大的数据类型可以保存多大的数据. #include ...

  9. 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 ...

最新文章

  1. WDS Services Can't Start
  2. Xtrabackup备份、还原、恢复Mysql操作大全
  3. Python 0/1背包、动态规划
  4. 集成学习(ensemble learning)(三)
  5. glob在php中的意思,PHP函数glob介绍
  6. 小项目也可以学习到很多东西
  7. 吴恩达团队新研究!用MRNet进行膝关节磁共振影像诊断 已媲美医生 | 论文
  8. java 自定义异常实例分析_Java自定义异常类的实例详解
  9. android 音乐歌词接口,Android自定义View--仿QQ音乐歌词
  10. mysql on azure 链接_如何通过Python从Azure函数连接到azuremysql
  11. 【Sql查询数据】for 日、月、年
  12. OpenGL编程指南 示例笔记(2)--独立地移动光源
  13. 漏洞挖掘 符号执行_漏洞挖掘综述
  14. 中国移动的固网宽带不再免费,该项业务收入已与中国电信相当
  15. [TEST123] Performance Test
  16. 水色物语:清新水彩手绘插画技法
  17. adguard自定义_AdGuard-轻量级的全平台广告过滤工具
  18. vsphere client 60天问题
  19. 论文阅读:《A Neural Conversational Model》
  20. iPhone 4 实现 HTC Sense 时钟动画天气

热门文章

  1. SQL语句中 Case具有两种格式:简单Case函数和Case搜索函数
  2. AWS考报考方法、注意事项
  3. Android 密码正则表达式验证
  4. 玩转群晖NAS——前言
  5. PHP实现支付宝支付
  6. FreeRTOS中mutex用法
  7. 决策树分析例题经典案例_8决策树例题解析.ppt
  8. 一种优于“分区魔术师”的无损分区新方法
  9. 电商大数据之用户画像
  10. Python setattr()函数