JavaScript 大数据相加的问题


Posted in Javascript onAugust 03, 2011

同样是一道面试题,来自有道前端的面试。
写一个函数处理大数据的相加问题,所谓的大数据是指超出了整型,长整型之类的常规数据类型表示范围的数据。实现语言不限。
我是用js实现的,说一下我自己的思路:
1、首先这个题目最重要的环节在考虑怎么存储大数据?用什么数据类型保存呢?最简单可行的方式是String
2、确定了使用何种类型保存数据之后这个题目就明朗了。首先判断两个传入字符串的长度,取最短的len循环,两者从低位开始对应位相加,同时注意保存进位。在短的数据处理完后,将进位交给较长串的剩余部分处理。
详细实现看一下代码,完整实例见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:其实吧,这个面试题被我改编了下,原始的面试题主考官提示了用字符串保存大数据的,这个其实降低难度了~~
Javascript 相关文章推荐
javascript从image转换为base64位编码的String
Jul 29 Javascript
jQuery实现简单的间隔向上滚动效果
Mar 09 Javascript
JS实现超简单的鼠标拖动效果
Nov 02 Javascript
JavaScript实现时间倒计时跳转(推荐)
Jun 28 Javascript
javascript显示系统当前时间代码
Dec 29 Javascript
完美的js图片轮换效果
Feb 05 Javascript
详解vue.js+UEditor集成 [前后端分离项目]
Jul 07 Javascript
vue2.0中vue-cli实现全选、单选计算总价格的实例代码
Jul 18 Javascript
微信小程序中使用wxss加载图片并实现动画效果
Aug 13 Javascript
深入浅析vue-cli@3.0 使用及配置说明
May 08 Javascript
一个手写的vue放大镜效果
Aug 09 Javascript
解决vant框架做H5时踩过的坑(下拉刷新、上拉加载等)
Nov 11 Javascript
推荐11款jQuery开发的复选框和单选框美化插件
Aug 02 #Javascript
JS 控制小数位数的实现代码
Aug 02 #Javascript
用JS判别浏览器种类以及IE版本的几种方法小结
Aug 02 #Javascript
JQuery+JS实现仿百度搜索结果中关键字变色效果
Aug 02 #Javascript
基于jquery实现漂亮的动态信息提示效果
Aug 02 #Javascript
基于jQuery替换table中的内容并显示进度条的代码
Aug 02 #Javascript
jQuery动态添加的元素绑定事件处理函数代码
Aug 02 #Javascript
You might like
Zend Framework教程之Autoloading用法详解
2016/03/08 PHP
php微信开发之上传临时素材
2016/06/24 PHP
php校验公钥是否可用的实例方法
2019/09/17 PHP
js调用flash的效果代码
2008/04/26 Javascript
js中prototype用法详细介绍
2013/11/14 Javascript
jQuery之ajax删除详解
2014/02/27 Javascript
浅析JS操作DOM的一些常用方法
2016/05/13 Javascript
Web前端开发之水印、图片验证码
2016/11/27 Javascript
微信小程序 css使用技巧总结
2017/01/09 Javascript
Angular实现购物车计算示例代码
2017/02/21 Javascript
Vue-router 类似Vuex实现组件化开发的示例
2017/09/15 Javascript
微信小程序项目实践之验证码倒计时功能
2018/07/18 Javascript
今天,小程序正式支持 SVG
2019/04/20 Javascript
浅谈vue3中effect与computed的亲密关系
2019/10/10 Javascript
Vue指令实现OutClick的示例
2020/11/16 Javascript
python基础教程之序列详解
2014/08/29 Python
Pyhthon中使用compileall模块编译源文件为pyc文件
2015/04/28 Python
Python写的一个定时重跑获取数据库数据
2016/12/28 Python
python实现12306抢票及自动邮件发送提醒付款功能
2018/03/08 Python
Python with用法:自动关闭文件进程
2019/07/10 Python
Django1.11自带分页器paginator的使用方法
2019/10/31 Python
python3 tcp的粘包现象和解决办法解析
2019/12/09 Python
基于python 凸包问题的解决
2020/04/16 Python
css背景图片的背景裁切、背景透明度、背景变换等效果运用
2012/12/24 HTML / CSS
请解释一下webService? 如何用.net实现webService
2014/06/09 面试题
DataReader和DataSet的异同
2014/12/31 面试题
化学教师教学反思
2014/01/17 职场文书
致800米运动员广播稿
2014/02/16 职场文书
大学竞选班干部演讲稿
2014/08/21 职场文书
2014年世界艾滋病日演讲稿
2014/11/28 职场文书
联欢会开场白
2015/06/01 职场文书
2016公司中秋节寄语
2015/12/07 职场文书
2016年清明节网上祭英烈活动总结
2016/04/01 职场文书
Python进阶学习之带你探寻Python类的鼻祖-元类
2021/05/08 Python
浅谈MySQL之select优化方案
2021/08/07 MySQL
SQL注入篇学习之盲注/宽字节注入
2022/03/03 MySQL