js算法题:两个大数相加最直观简洁的算法实现
Author:zhoulujun Date:
两个大数相加,位数 long long ,概况就是N长,而且加上小数位,尼玛,坑爹啊。
其实,这个在实际工作中并没有什么卵用,出了装B外
比如bigDecimal.js,其他金融类库不计其数。
但是,算法,还是得看下,
百度下,相关搜索n页。
但是,我觉得我这个实现,是最直观简洁的。
function bigAdd(num1,num2) { if(!num1){ return num2; } if(!num2){ return num1; } var arr1=num1.split("."), arr2=num2.split("."), intArr1=arr1[0].split(""), intArr2=arr2[0].split(""), decimalsArr1=arr1[1]||[], decimalsArr2=arr2[1]||[], resualtIntArr=[], resualtDecimalsArr=[], carrayInt=0, carrayDecimals=0; var decimalsMinLength=decimalsArr1.length>decimalsArr2.length?decimalsArr1.length:decimalsArr2.length; while (decimalsMinLength>0){ decimalsMinLength--; var sumDecimals=carrayDecimals+parseInt(decimalsArr1[decimalsMinLength]||0)+parseInt(decimalsArr2[decimalsMinLength]||0); if(sumDecimals<10){ resualtDecimalsArr.unshift(sumDecimals); carrayDecimals=0; }else { resualtDecimalsArr.unshift(sumDecimals-10); carrayDecimals=1; } } if(carrayDecimals>0){ carrayInt=carrayDecimals; } while (intArr1.length||intArr2.length){ var sumInt=carrayInt+parseInt(intArr1.pop()||0)+parseInt(intArr2.pop()||0); if(sumInt<10){ resualtIntArr.unshift(sumInt); carrayInt=0; }else { resualtIntArr.unshift(sumInt-10); carrayInt=1; } } if(carrayInt>0){ resualtIntArr.unshift(carrayInt); } return resualtIntArr.join("")+"."+resualtDecimalsArr.join(""); } // 34231674.654576891234 console.log(897353.222+33334321.432576891234); console.log(bigAdd("897353.222","33334321.432576891234"));
转载本站文章《js算法题:两个大数相加最直观简洁的算法实现》,
请注明出处:https://www.zhoulujun.cn/html/webfront/ECMAScript/js/2012_0215_8049.html