LIOJ — 1004

Conrad
Conrad KU
Published in
3 min readJul 3, 2023

--

Photo by Arif Riyanto on Unsplash

希望藉由程式解題的過程重新打好程式基礎和學習遺漏的相關知識點

會將解題過程遇到困難的地方做個紀錄

測驗網站: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 個位數以內?

NumberBigInt

這裡說很大的數字意思是說會大於 Number.MAX_SAFE_INTEGER = 9,007,199,254,740,991

當大於這個數字去做運算時就會產生問題

這時就會需要用到 BigInt 可以達到 15052 個位數

// bigint
let a = 2n ** 50000n;

注意事項

JavaScript 內部所有數字都是以 64 位浮點數形式儲存,即使整數也是如此。

所以 11.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

JavaScript 數值

延伸閱讀

--

--

Conrad
Conrad KU

Remember, happiness is a choice, so choose to be happy.