每天乙個被拒小技巧 BigInt

2021-10-07 11:01:54 字數 1036 閱讀 1864

leetcode 67題題解。

function addbinary(a: string, b: string): string
關於這個寫法,可能存在三個疑問:

為什麼要在a、b前面加上乙個0b

tostring輸出是否正常,會不會帶上控制台輸出時結尾的n?

相容性怎麼樣?

我們也知道,js / ts裡的最大安全整數是253 - 1,超出這個範圍的整數運算就不再準確(比如著名的2**53 === 2**53 + 1)或無法表示了。為了解決這個問題,就有了bigint提案(一開始似乎是叫integer),並且在es10中成為規範;這是bigint的歷史背景。也是因為這個原因,bigint不能和number互操作,必須進行型別轉換,而且在轉換過程中可能會丟失精度。

關於第乙個問題,如果不考慮題目中給的資料範圍,其實我們的第一反應應該是用parseint

function addbinary(a: string, b: string): string
在這種情況下,是不需要加上0b的,因為已經在parseint中指定了是二進位制。但bigint的建構函式只有乙個引數,所以需要加上這個字首來表明這是乙個代表二進位制數的字串(0b也行)。

關於第二個問題,因為console.log是乙個非官方規範,每個瀏覽器有自己的實現,所以控制台輸出和tostring方法的輸出沒有必然聯絡。而且文件也說明了,bigint的tostring不會帶上結尾的n。有乙個很有意思的事,就是bigint沒有-0;不過跟這個話題沒什麼關係。

關於第三個問題,這個特性目前還沒有穩定,相容性只有70%多。但是主流瀏覽器已經相容,而且也有polyfill,所以相容性不是乙個很大的問題。

每天乙個python小技巧

使用場景 如果需要多次重複的產出檔案,可以通過如下的方式來根據時間戳建立新的資料夾,用來區分儲存檔案。def getcurrenttime dirpath 根據時間戳,建立指定輸出檔案 param dirpath return if os.path.exists dirpath time.strft...

每天乙個shell小知識(for)

在實際工作環境中,經常會遇到某項任務需要多次執行的情況,而每次執行時僅僅是處理的物件不一樣,其他命令完全相同。如 根據伺服器清單檢查各個主機的存活狀態 根據ip位址黑名單設定拒絕訪問的防火牆策略等。這樣繁瑣的重複任務時,if語句已經不能滿足需求。則我們需要for迴圈語句。使用for迴圈時,需要指定乙...

每天乙個CSS(box sizing

content box 是指定box的 寬度和高度分別應用到元素的內容框。在寬度和高度之外繪製元素的內邊距和邊框。示例一 設定div的外邊距為 5px,內邊距為 5px,邊框為 10px,寬為100px,高為100px,我們指定box sizing 為content box grid contain...