Js 超大整數(shù)相加的解決方案

背景
Js 和任何一門語言一樣竞膳,對其數(shù)值的范圍有限制。

Number.MAX_VALUE // 1.7976931348623157e+308
Number.MAX_SAFE_INTEGER // 9007199254740991
Number.MIN_VALUE // 5e-324
Number.MIN_SAFE_INTEGER // -9007199254740991

如果我們想要對一個(gè)超大的整數(shù)(> Number.MAX_SAFE_INTEGER)進(jìn)行加法運(yùn)算汇跨,但是又想輸出一般形式呛占,那么使用 + 是無法達(dá)到的,一旦數(shù)字超過 Number.MAX_SAFE_INTEGER 數(shù)字會被立即轉(zhuǎn)換為科學(xué)計(jì)數(shù)法暴区,并且數(shù)字精度相比以前將會有誤差闯团。在此時(shí)就需要自己實(shí)現(xiàn)一套加法算法。

代碼實(shí)現(xiàn)

function sumBigNumber(a, b) {
  var res = '',
    temp = 0;
  a = a.split('');
  b = b.split('');
  while (a.length || b.length || temp) {
    temp += ~~a.pop() + ~~b.pop();
    res = (temp % 10) + res;
    temp = temp > 9;
  }
  return res.replace(/^0+/, '');
}

解釋

  • 首先我們用字符串的形勢來保存大數(shù)仙粱,就保證了其在數(shù)學(xué)表示上不會發(fā)生變化
    初始化res, temp變量來保存中間計(jì)算的結(jié)果房交,在將兩個(gè)字符串split為數(shù)組,以便我們進(jìn)行每一位的運(yùn)算
  • 循環(huán)的第一次就是進(jìn)行 "個(gè)位" 的運(yùn)算伐割,將二者最末尾的兩個(gè)數(shù)相加候味,由于每一位數(shù)字是0 - 9,所以需要進(jìn)行進(jìn)位隔心,在進(jìn)過取余數(shù)操作后白群,將結(jié)果保留在個(gè)位。
  • 判斷 temp 是否大于 10济炎,若是則將 temp 賦值為 true川抡,等等,為什么要賦值成布爾值,不要著急崖堤,魔法即將發(fā)生侍咱。
  • 在兩個(gè)大數(shù)中的一個(gè)還有數(shù)字沒有參與運(yùn)算,或者前一次運(yùn)算發(fā)生進(jìn)位后密幔,進(jìn)行下一次循環(huán)楔脯。
  • 接著除了對新的兩個(gè)數(shù)字相加還要加上 temp,若上次發(fā)生了進(jìn)位胯甩,則此時(shí) temp 為 true昧廷,Js因?yàn)榇嬖陔[式轉(zhuǎn)換,所以 true 轉(zhuǎn)換為 1偎箫,我們借用 Js 的類型轉(zhuǎn)換木柬,完成了邏輯上的逢10進(jìn)1操作。
    接下來就是重復(fù)上述的操作淹办,直到計(jì)算結(jié)束眉枕。

例子:

sumBigNumber('100000000000002222', '111111'); // 100000000000113333
sumBigNumber('3782647863278468012934670', '23784678091370408971329048718239749083'); /
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市怜森,隨后出現(xiàn)的幾起案子速挑,更是在濱河造成了極大的恐慌,老刑警劉巖副硅,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姥宝,死亡現(xiàn)場離奇詭異,居然都是意外死亡恐疲,警方通過查閱死者的電腦和手機(jī)腊满,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來流纹,“玉大人糜烹,你說我怎么就攤上這事违诗∈” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵诸迟,是天一觀的道長茸炒。 經(jīng)常有香客問我,道長阵苇,這世上最難降的妖魔是什么壁公? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮绅项,結(jié)果婚禮上紊册,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好囊陡,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布芳绩。 她就那樣靜靜地躺著,像睡著了一般撞反。 火紅的嫁衣襯著肌膚如雪妥色。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天遏片,我揣著相機(jī)與錄音嘹害,去河邊找鬼。 笑死吮便,一個(gè)胖子當(dāng)著我的面吹牛笔呀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播髓需,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼凿可,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了授账?” 一聲冷哼從身側(cè)響起枯跑,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎白热,沒想到半個(gè)月后敛助,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡屋确,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年纳击,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片攻臀。...
    茶點(diǎn)故事閱讀 38,789評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡焕数,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出刨啸,到底是詐尸還是另有隱情堡赔,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布设联,位于F島的核電站善已,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏离例。R本人自食惡果不足惜换团,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宫蛆。 院中可真熱鬧艘包,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至磷醋,卻和暖如春猫牡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背邓线。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工淌友, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人骇陈。 一個(gè)月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓震庭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親你雌。 傳聞我的和親對象是個(gè)殘疾皇子器联,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評論 2 351