2021-10-07

这篇博客探讨了在JavaScript中解决字符串表示的非负整数相乘时遇到的最大安全整数限制问题。作者首先尝试将字符串转换为整数再相乘,但发现当输入数值过大时会超出Number.MAX_SAFE_INTEGER,导致结果错误。然后,作者分享了一种避免溢出的解决方案,即通过逐位相乘并累加进位的方式来计算乘积,确保结果的正确性。这种方法巧妙地避开了JavaScript数值计算的限制。
摘要由CSDN通过智能技术生成

字符串相乘 LeetCode js实现

题目描述

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

解题思路

一开始我就想那字符串每个位转换成整数,然后相乘就好了

var multiply = function(num1, num2) {
    var n=0, m=0
    for(let i=0; i<num1.length; i++){
        n = n*10 + parseInt(num1[i])
    }
    for(let j=0;j<num2.length;j++){
        m = m*10 + parseInt(num2[j])
    }
    var res = n*m
    return res.toString()
};

结果 123456789*987654321 得到的结果不对,原因是超出了javaScript最大的数Number.MAX_SAFE_INTEGER
导致结果不对,那只能换另一种方法了。
看见LeetCode中大家的做法 真是妙啊
在这里插入图片描述
实现代码在这里:

var multiply = function(num1, num2) {
      if(num1 == '0' || num2 == '0') return '0';
      num1 = num1 + '';
      num2 = num2 + '';
      let l1 = num1.length,l2 = num2.length, 
          store = new Array(l1 + l2 - 1).fill(0), t = 0, r = '';
      // 每个位相乘的结果
      for( let i = 0; i < l2; i++ ){
        for( let j = 0; j < l1; j++ ){
          store[i + j] += (+num2[i] * + num1[j])
        }
      }
      let k = store.length;
      while(k--){
        t += store[k];
        r = t % 10 + r;
        t = t / 10 | 0;
      }
      return t > 0 ? (t + r) : r;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值