国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

js實(shí)現(xiàn)大數(shù)相乘

cnTomato / 2862人閱讀

摘要:昨晚用寫了個(gè)大數(shù)相乘的函數(shù),模擬寫豎式計(jì)算,但性能太低,算得很慢。數(shù)組直接用字面量也不需要提前分配內(nèi)存。為了增強(qiáng)代碼的強(qiáng)壯性,函數(shù)第一行是判斷輸入的合法性,不是數(shù)字也就沒(méi)有進(jìn)行運(yùn)算的必要了,返回一個(gè)空串。

昨晚用js寫了個(gè)大數(shù)相乘的函數(shù),模擬寫豎式計(jì)算,但性能太低,算得很慢。后來(lái)在leetCode看了高票答案,贊嘆算法的神奇。傳送門=>LeetCode-Multiply Strings

引用高票答主的圖片:


沒(méi)想到下標(biāo)之間還有這樣的對(duì)應(yīng)關(guān)系。算法工程師真的活該拿高薪!
因?yàn)樗怯胘ava寫的,我轉(zhuǎn)化成js如下

var multiply = function(num1, num2) {
  if(isNaN(num1) || isNaN(num2)) return "" //判斷輸入是不是數(shù)字
  var len1 = num1.length,
    len2 = num2.length
  var ans = []
  for (var i = len1 - 1; i >= 0; i--) {    //這里倒過(guò)來(lái)遍歷很妙,不需要處理進(jìn)位了
    for (var j = len2 - 1; j >= 0; j--) {
      var index1 = i + j
      var index2 = i + j + 1
      var mul = num1[i] * num2[j] + (ans[index2] || 0)
      ans[index1] = Math.floor(mul / 10) + (ans[index1] || 0)
      ans[index2] = mul % 10
    }
  }
  var result = ans.join("")
    //這里結(jié)果有可能會(huì)是多個(gè)零的情況,需要轉(zhuǎn)成數(shù)字判斷
    //原來(lái)寫的是return +result === 0 ? "0" : result,result字符串會(huì)出現(xiàn)有前置0的情況,感謝評(píng)論區(qū)小伙伴@nicknice的提醒讓我找到了這個(gè)錯(cuò)誤
    return +result === 0 ? "0" : result.replace(/^0+/,"")

}

js數(shù)組有join()方法,感覺(jué)代碼要簡(jiǎn)潔一些。數(shù)組直接用字面量也不需要提前分配內(nèi)存。
為了增強(qiáng)代碼的強(qiáng)壯性,函數(shù)第一行是判斷輸入的合法性,不是數(shù)字也就沒(méi)有進(jìn)行運(yùn)算的必要了,返回一個(gè)空串。原高票答案沒(méi)有做這方面的處理,輸入字母的話結(jié)果始終是2401,不清楚是什么原因,也不是ASCII碼,知道的還請(qǐng)多多指教。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/96867.html

相關(guān)文章

  • LeetCode43.字符串相乘 JavaScript

    摘要:給定兩個(gè)以字符串形式表示的非負(fù)整數(shù)和,返回和的乘積,它們的乘積也表示為字符串形式。示例輸入輸出示例輸入輸出說(shuō)明和的長(zhǎng)度小于。和均不以零開(kāi)頭,除非是數(shù)字本身。不能使用任何標(biāo)準(zhǔn)庫(kù)的大數(shù)類型比如或直接將輸入轉(zhuǎn)換為整數(shù)來(lái)處理。 給定兩個(gè)以字符串形式表示的非負(fù)整數(shù) num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示為字符串形式。示例 1: 輸入: num1 = 2, ...

    kk_miles 評(píng)論0 收藏0
  • [Leetcode] Multiply String and Big Interger 大數(shù)乘法加法

    摘要:因?yàn)楸怀藬?shù)每一位數(shù)字和乘數(shù)相乘的結(jié)果是依次錯(cuò)開(kāi)的,所以就沒(méi)問(wèn)題。判斷兩個(gè)數(shù)的大小的方法,是先判斷其長(zhǎng)度,如果長(zhǎng)度不一樣,則較長(zhǎng)的較大,如果長(zhǎng)度一樣,則需要比較每一位。 Multiply Strings Given two numbers represented as strings, return multiplication of the numbers as a string. ...

    keithxiaoy 評(píng)論0 收藏0
  • 算法思想

    摘要:基礎(chǔ)算法思想類別遞推枚舉遞歸分治貪婪回溯試探模擬遞推遞推分類順推法從已知條件出發(fā),逐步推算出要解決問(wèn)題的方法。貪心算法的局限不能保證最后的解是最優(yōu)的不能求最大最小解問(wèn)題只能求滿足某些約束條件的可行解范圍。 基礎(chǔ)算法思想類別 遞推 枚舉 遞歸 分治 貪婪 回溯(試探) 模擬 遞推 遞推分類 順推法:從已知條件出發(fā),逐步推算出要解決問(wèn)題的方法。 逆推法:從已知結(jié)果出發(fā),用迭代表達(dá)式...

    sshe 評(píng)論0 收藏0
  • 關(guān)于PHP精確計(jì)算模塊

    摘要:精確計(jì)算的函數(shù)簡(jiǎn)介是的縮寫。函數(shù)的參數(shù)都是操作數(shù)加上一個(gè)可選的,比如,如果沒(méi)有提供,就用的缺省值。 PHP精確計(jì)算的BC函數(shù) 簡(jiǎn)介:bc是Binary Calculator的縮寫。bc*函數(shù)的參數(shù)都是操作數(shù)加上一個(gè)可選的 [int scale],比如string bcadd(string $left_operand, string $right_operand[, int $scal...

    MASAILA 評(píng)論0 收藏0
  • php浮點(diǎn)數(shù)精確運(yùn)算

    摘要:所以永遠(yuǎn)不要相信浮點(diǎn)數(shù)結(jié)果精確到了最后一位,也永遠(yuǎn)不要比較兩個(gè)浮點(diǎn)數(shù)是否相等。如果確實(shí)需要更高的精度,應(yīng)該使用任意精度數(shù)學(xué)函數(shù)或者函數(shù)那么上面的算式我們應(yīng)該改寫為這樣就能解決浮點(diǎn)數(shù)的計(jì)算問(wèn)題了轉(zhuǎn)自 bc是Binary Calculator的縮寫。bc*函數(shù)的參數(shù)都是操作數(shù)加上一個(gè)可選的 [int scale],比如string bcadd(string $left_operand, s...

    SimonMa 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<