JS實現大數字加減以及比較大小

2021-10-12 16:12:44 字數 1794 閱讀 8855

js整數的精度是math.pow(2,53),大於 9007199254740992 (16位數)的可能會丟失精度。所以對於大數字加減和比較,可以將數字拆分成多個15位數字,進行加減或比較。

function

getmidnum

(str, start, len)

else

}

**

* js分治演算法實現大整數相加,演算法複雜度為o

(n/15

)* 處理情況:正數 + 正數、負數+負數、負數+正數、正數+負數

* @param a

* @param b

* @returns */

export

const

bignumadd

=(a, b)

=>

else

if(a[0]

==='-'

)else

if(b[0]

==='-'

)let res =

''let temp =

0let len1 = a.length

let len2 = b.length

let n = math.

ceil

(math.

max(len1, len2)/15

)//分成多少段

for(

let i =

1; i < n +

1; i++

)//異常2:15位相加等於16位

if(strtemp.length ===16)

}//相加後的結果放入res前面

res = strtemp + res

temp =0}

return res

}

/**

* 大整數相減,處理 負數-負數、負數-正數、正數-負數的情況

* @param a

* @param b

* @returns

*/export

const

bignumsub

=(a, b)

=>

else

if(a[0]

==='-'

)else

if(b[0]

==='-'

)let symb =

''if

(bignumcompare

(a, b)

<0)

let res =

''let temp =

0let n = math.

ceil

(a.length /15)

//分成多少段

for(

let i =

1; i < n +

1; i++

)else

let strtemp =

string

(tempnum)

if(i !== n)

}//相加後的結果放入res前面

res = strtemp + res

}return symb + res

}

/**

* 比較兩個大整數的大小,返回-1,0,1 aexport

const

bignumcompare

=(a, b)

=>

else

if(cur >0)

}return back

}

js中比較大小

注意事項 js中比較大小 的方法不能用類似 0經查詢 得到以下方法 解決方法一 if eval pageno eval total eval 函式用於在不引用任何特定物件的情況下計算 字串。解決方法二 if pageno 1 total 1 解決方法三 if pageno total 0 將分鐘轉換...

python時間如何相加減,,如何比較大小

時間字串 時間元組 時間戳 這個是轉換之間的概念 當前時間 字串2022 05 01 00 00 00 時間元組 time.struct time tm year 2022,tm mon 5,tm mday 1,tm hour 0,tm min 0,tm sec 55,tm wday 6,tm yd...

三個數字比較大小

本題要求將輸入的任意3個整數從小到大輸出。輸入格式 輸入在一行中給出3個整數,其間以空格分隔。輸出格式 在一行中將3個整數從小到大輸出,其間以 相連。相信大家看到這個題目時的第一想法都是,我直接排序就好了。的確,排序是這類問題的通解,任意乙個排序演算法都可以將這道題完美解決。但是博主看到題目中只有三...