希望藉由程式解題的過程重新打好程式基礎和學習遺漏的相關知識點
會將解題過程遇到困難的地方做個紀錄
測驗網站:LidemyOJ ( LIOJ ) by 胡立 ( Huli )
免費課程 — [ALG101] 先別急著寫 leetcode by 胡立 ( Huli )
討論區:Lidemy Discussions by 胡立 ( Huli )
🔖 文章索引
1. 關於 Input 描述的疑惑點
2. 什麼是正整數?
3. 很大的數字,保證長度為 512 個位數以內?
4. 注意事項
5. 參考文章
6. 延伸閱讀
關於 Input 描述的疑惑點
什麼是正整數?
[特別注意 A 與 B 可能是很大的數字,保證長度為 512 個位數以內]
這句我以為是判斷字串長度在用 Number
判斷是不是數字
結果跟我想的不一樣
什麼是正整數?
根據維基百科解釋[非零自然數]即指正整數 ( 1, 2, 3, 4, … )
自然數是[非負整數]( 0, 1, 2, 3, 4, … )
整數是包括負整數、零 ( 0 )與正整數
很大的數字,保證長度為 512 個位數以內?
這裡說很大的數字意思是說會大於 Number.MAX_SAFE_INTEGER
= 9,007,199,254,740,991
當大於這個數字去做運算時就會產生問題
這時就會需要用到 BigInt
可以達到 15052
個位數
// bigint
let a = 2n ** 50000n;
注意事項
JavaScript 內部所有數字都是以 64 位浮點數形式儲存,即使整數也是如此。
所以 1
和 1.0
是相同的,也就是說 JavaScript 底層根本沒有整數,所有數字都是小數 ( 64 位浮點數 )。
由於浮點數不是精確的值,所以涉及小數的比較和運算要特別小心。
// false
0.1 + 0.2 === 0.3
// 2.9999999999999996
0.3 / 0.1
// false
(0.3 - 0.2) === (0.2 - 0.1)
P.S.
算錢用浮點,遲早被人扁 !
Number.MIN_VALUE
是一個超級超級小的正數比 0 大
參考文章
前端工程研究:關於 JavaScript 中 Number 型別的常見地雷與建議作法
BigInt Vs Number in JavaScript