JavaScript 大數(shù)據(jù)相加的問題
更新時(shí)間:2011年08月03日 23:16:56 作者:
寫一個(gè)函數(shù)處理大數(shù)據(jù)的相加問題,所謂的大數(shù)據(jù)是指超出了整型,長(zhǎng)整型之類的常規(guī)數(shù)據(jù)類型表示范圍的數(shù)據(jù)。實(shí)現(xiàn)語(yǔ)言不限。
同樣是一道面試題,來(lái)自有道前端的面試。
寫一個(gè)函數(shù)處理大數(shù)據(jù)的相加問題,所謂的大數(shù)據(jù)是指超出了整型,長(zhǎng)整型之類的常規(guī)數(shù)據(jù)類型表示范圍的數(shù)據(jù)。實(shí)現(xiàn)語(yǔ)言不限。
我是用js實(shí)現(xiàn)的,說一下我自己的思路:
1、首先這個(gè)題目最重要的環(huán)節(jié)在考慮怎么存儲(chǔ)大數(shù)據(jù)?用什么數(shù)據(jù)類型保存呢?最簡(jiǎn)單可行的方式是String
2、確定了使用何種類型保存數(shù)據(jù)之后這個(gè)題目就明朗了。首先判斷兩個(gè)傳入字符串的長(zhǎng)度,取最短的len循環(huán),兩者從低位開始對(duì)應(yīng)位相加,同時(shí)注意保存進(jìn)位。在短的數(shù)據(jù)處理完后,將進(jìn)位交給較長(zhǎng)串的剩余部分處理。
詳細(xì)實(shí)現(xiàn)看一下代碼,完整實(shí)例見jsfiddle
var strAdd = function(srcA, srcB) {
var i, temp, tempA, tempB, len, lenA, lenB, carry = 0;
var res = [],
arrA = [],
arrB = [],
cloneArr = [];
arrA = srcA.split('');
arrB = srcB.split('');
arrA.reverse();
arrB.reverse();
lenA = arrA.length;
lenB = arrB.length;
len = lenA > lenB ? lenB : lenA;
for (i = 0; i < len; i++) {
tempA = parseInt(arrA[i], 10);
tempB = parseInt(arrB[i], 10);
temp = tempA + tempB + carry;
if (temp > 9) {
res.push(temp - 10);
carry = 1;
} else {
res.push(temp);
carry = 0;
}
}
cloneArr = lenA > lenB ? arrA : arrB;
for (; i < cloneArr.length; i++) {
tempA = parseInt(cloneArr[i], 10);
temp = tempA + carry;
if (temp > 9) {
res.push(temp - 10);
carry = 1;
} else {
res.push(temp);
carry = 0;
}
}
return (res.reverse()).join('');
};
以上。
PS:其實(shí)吧,這個(gè)面試題被我改編了下,原始的面試題主考官提示了用字符串保存大數(shù)據(jù)的,這個(gè)其實(shí)降低難度了~~
寫一個(gè)函數(shù)處理大數(shù)據(jù)的相加問題,所謂的大數(shù)據(jù)是指超出了整型,長(zhǎng)整型之類的常規(guī)數(shù)據(jù)類型表示范圍的數(shù)據(jù)。實(shí)現(xiàn)語(yǔ)言不限。
我是用js實(shí)現(xiàn)的,說一下我自己的思路:
1、首先這個(gè)題目最重要的環(huán)節(jié)在考慮怎么存儲(chǔ)大數(shù)據(jù)?用什么數(shù)據(jù)類型保存呢?最簡(jiǎn)單可行的方式是String
2、確定了使用何種類型保存數(shù)據(jù)之后這個(gè)題目就明朗了。首先判斷兩個(gè)傳入字符串的長(zhǎng)度,取最短的len循環(huán),兩者從低位開始對(duì)應(yīng)位相加,同時(shí)注意保存進(jìn)位。在短的數(shù)據(jù)處理完后,將進(jìn)位交給較長(zhǎng)串的剩余部分處理。
詳細(xì)實(shí)現(xiàn)看一下代碼,完整實(shí)例見jsfiddle
復(fù)制代碼 代碼如下:
var strAdd = function(srcA, srcB) {
var i, temp, tempA, tempB, len, lenA, lenB, carry = 0;
var res = [],
arrA = [],
arrB = [],
cloneArr = [];
arrA = srcA.split('');
arrB = srcB.split('');
arrA.reverse();
arrB.reverse();
lenA = arrA.length;
lenB = arrB.length;
len = lenA > lenB ? lenB : lenA;
for (i = 0; i < len; i++) {
tempA = parseInt(arrA[i], 10);
tempB = parseInt(arrB[i], 10);
temp = tempA + tempB + carry;
if (temp > 9) {
res.push(temp - 10);
carry = 1;
} else {
res.push(temp);
carry = 0;
}
}
cloneArr = lenA > lenB ? arrA : arrB;
for (; i < cloneArr.length; i++) {
tempA = parseInt(cloneArr[i], 10);
temp = tempA + carry;
if (temp > 9) {
res.push(temp - 10);
carry = 1;
} else {
res.push(temp);
carry = 0;
}
}
return (res.reverse()).join('');
};
以上。
PS:其實(shí)吧,這個(gè)面試題被我改編了下,原始的面試題主考官提示了用字符串保存大數(shù)據(jù)的,這個(gè)其實(shí)降低難度了~~
相關(guān)文章
javaScript的函數(shù)對(duì)象的聲明詳解
這篇文章主要介紹了javaScript的函數(shù)對(duì)象的聲明詳解,需要的朋友可以參考下2015-02-02
談?wù)勎覍?duì)JavaScript中typeof和instanceof的深入理解
這次主要說說javascript的類型判斷函數(shù)typeof和判斷構(gòu)造函數(shù)原型instanceof的用法和注意的地方,對(duì)本文感興趣的朋友一起看看吧2015-12-12
uniapp中使用videojs構(gòu)建H5直播播放器
這篇文章主要為大家介紹了uniapp中使用videojs構(gòu)建H5直播播放器實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
深入理解js A*尋路算法原理與具體實(shí)現(xiàn)過程
這篇文章主要介紹了js A*尋路算法原理與具體實(shí)現(xiàn)過程,結(jié)合實(shí)例形式詳細(xì)分析了A*尋路算法的具體概念、原理、實(shí)現(xiàn)方法與相關(guān)操作技巧,需要的朋友可以參考下2018-12-12
防止Layui form表單重復(fù)提交的實(shí)現(xiàn)方法
今天小編就為大家分享一篇防止Layui form表單重復(fù)提交的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2019-09-09
event.keyCode鍵碼值表 附只能輸入特定的字符串代碼
非常不錯(cuò)的應(yīng)用,讓文本框里只能輸入money大家看下具體的實(shí)現(xiàn)代碼,真是只有想到,原理很簡(jiǎn)單。2009-05-05
JS注釋所產(chǎn)生的bug 即使注釋也會(huì)執(zhí)行
寫js時(shí)出現(xiàn)個(gè)bug一直提示我JAVA類中的一個(gè)屬性沒有,可是明明注釋掉了,后來(lái)才知道,JS里即使注釋也會(huì)執(zhí)行2013-11-11
JavaScript自定義localStorage監(jiān)聽事件的解決方法
在項(xiàng)目開發(fā)過程中,發(fā)現(xiàn)有很多時(shí)候進(jìn)行l(wèi)ocalStorage.setItem()操作設(shè)置本地存儲(chǔ)后,頁(yè)面必須刷新才能夠獲取到存儲(chǔ)數(shù)據(jù),為了解決這個(gè)問題,就必須要用到自定義localStorage監(jiān)聽事件了,所以本文給大家介紹了自定義localStorage監(jiān)聽事件,需要的朋友可以參考下2024-10-10

