摘要:昨晚用寫了個大數(shù)相乘的函數(shù),模擬寫豎式計算,但性能太低,算得很慢。數(shù)組直接用字面量也不需要提前分配內(nèi)存。為了增強代碼的強壯性,函數(shù)第一行是判斷輸入的合法性,不是數(shù)字也就沒有進行運算的必要了,返回一個空串。
昨晚用js寫了個大數(shù)相乘的函數(shù),模擬寫豎式計算,但性能太低,算得很慢。后來在leetCode看了高票答案,贊嘆算法的神奇。傳送門=>LeetCode-Multiply Strings
引用高票答主的圖片:
沒想到下標之間還有這樣的對應關系。算法工程師真的活該拿高薪!
因為他是用java寫的,我轉(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--) { //這里倒過來遍歷很妙,不需要處理進位了 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é)果有可能會是多個零的情況,需要轉(zhuǎn)成數(shù)字判斷 //原來寫的是return +result === 0 ? "0" : result,result字符串會出現(xiàn)有前置0的情況,感謝評論區(qū)小伙伴@nicknice的提醒讓我找到了這個錯誤 return +result === 0 ? "0" : result.replace(/^0+/,"") }
js數(shù)組有join()方法,感覺代碼要簡潔一些。數(shù)組直接用字面量也不需要提前分配內(nèi)存。
為了增強代碼的強壯性,函數(shù)第一行是判斷輸入的合法性,不是數(shù)字也就沒有進行運算的必要了,返回一個空串。原高票答案沒有做這方面的處理,輸入字母的話結(jié)果始終是2401,不清楚是什么原因,也不是ASCII碼,知道的還請多多指教。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/96867.html
摘要:給定兩個以字符串形式表示的非負整數(shù)和,返回和的乘積,它們的乘積也表示為字符串形式。示例輸入輸出示例輸入輸出說明和的長度小于。和均不以零開頭,除非是數(shù)字本身。不能使用任何標準庫的大數(shù)類型比如或直接將輸入轉(zhuǎn)換為整數(shù)來處理。 給定兩個以字符串形式表示的非負整數(shù) num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示為字符串形式。示例 1: 輸入: num1 = 2, ...
摘要:因為被乘數(shù)每一位數(shù)字和乘數(shù)相乘的結(jié)果是依次錯開的,所以就沒問題。判斷兩個數(shù)的大小的方法,是先判斷其長度,如果長度不一樣,則較長的較大,如果長度一樣,則需要比較每一位。 Multiply Strings Given two numbers represented as strings, return multiplication of the numbers as a string. ...
摘要:精確計算的函數(shù)簡介是的縮寫。函數(shù)的參數(shù)都是操作數(shù)加上一個可選的,比如,如果沒有提供,就用的缺省值。 PHP精確計算的BC函數(shù) 簡介:bc是Binary Calculator的縮寫。bc*函數(shù)的參數(shù)都是操作數(shù)加上一個可選的 [int scale],比如string bcadd(string $left_operand, string $right_operand[, int $scal...
摘要:所以永遠不要相信浮點數(shù)結(jié)果精確到了最后一位,也永遠不要比較兩個浮點數(shù)是否相等。如果確實需要更高的精度,應該使用任意精度數(shù)學函數(shù)或者函數(shù)那么上面的算式我們應該改寫為這樣就能解決浮點數(shù)的計算問題了轉(zhuǎn)自 bc是Binary Calculator的縮寫。bc*函數(shù)的參數(shù)都是操作數(shù)加上一個可選的 [int scale],比如string bcadd(string $left_operand, s...
閱讀 4365·2021-11-24 10:24
閱讀 1409·2021-11-22 15:22
閱讀 2038·2021-11-17 09:33
閱讀 2428·2021-09-22 15:29
閱讀 515·2019-08-30 15:55
閱讀 1652·2019-08-29 18:42
閱讀 2731·2019-08-29 12:55
閱讀 1772·2019-08-26 13:55