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 相关文章推荐
jQuery textarea的长度进行验证
May 06 Javascript
JQuery调webservice实现邮箱验证(检测是否可用)
May 21 Javascript
不要使用jQuery触发原生事件的方法
Mar 03 Javascript
HTML5+setCutomValidity()函数验证表单实例分享
Apr 24 Javascript
java必学必会之static关键字
Dec 03 Javascript
Bootstrap入门书籍之(五)导航条、分页导航
Feb 17 Javascript
基于jQuery的select下拉框选择触发事件实例分析
Nov 18 Javascript
javascript获取以及设置光标位置
Feb 16 Javascript
JS实现简单抖动效果
Jun 01 Javascript
vue通过路由实现页面刷新的方法
Jan 25 Javascript
详解Node.js 中使用 ECDSA 签名遇到的坑
Nov 26 Javascript
Vue从TodoList中学父子组件通信
Feb 05 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
PHP连接access数据库
2008/03/27 PHP
PHP类的静态(static)方法和静态(static)变量使用介绍
2012/02/19 PHP
php单例模式实现(对象只被创建一次)
2012/12/05 PHP
修复ShopNC使用QQ 互联时提示100010 错误
2015/11/08 PHP
CodeIgniter读写分离实现方法详解
2016/01/20 PHP
JavaScript效率调优经验
2009/06/04 Javascript
JavaScript 继承详解(二)
2009/07/13 Javascript
jquery 日期分离成年月日的代码
2010/05/14 Javascript
js中eval详解
2012/03/30 Javascript
jquery对元素拖动排序示例
2014/01/16 Javascript
13 款最热门的 jQuery 图像 360 度旋转插件推荐
2014/12/09 Javascript
javascript面向对象之访问对象属性的两种方式分析
2015/01/13 Javascript
uploadify多文件上传参数设置技巧
2015/11/16 Javascript
理解Javascript文件动态加载
2016/01/29 Javascript
Vue.js开发环境快速搭建教程
2017/03/17 Javascript
微信扫码支付零云插件版实例详解
2017/04/26 Javascript
解决vue build打包之后首页白屏的问题
2018/03/06 Javascript
axios对请求各种异常情况处理的封装方法
2018/09/25 Javascript
Vue.js结合bootstrap前端实现分页和排序效果
2018/12/29 Javascript
python 根据pid杀死相应进程的方法
2017/01/16 Python
python实时获取外部程序输出结果的方法
2019/01/12 Python
Python Selenium 之数据驱动测试的实现
2019/08/01 Python
Python学习笔记之列表和成员运算符及列表相关方法详解
2019/08/22 Python
使用python实现离散时间傅里叶变换的方法
2019/09/02 Python
解决python 读取excel时 日期变成数字并加.0的问题
2019/10/08 Python
深入浅析Python 中的sklearn模型选择
2019/10/12 Python
python实现引用其他路径包里面的模块
2020/03/09 Python
Python列表嵌套常见坑点及解决方案
2020/09/30 Python
Vinatis德国:法国领先的葡萄酒邮购公司
2020/09/07 全球购物
Hashtable 添加内容的方式有哪几种,有什么区别?
2012/04/08 面试题
工作中的自我评价如何写好
2013/10/28 职场文书
就业协议书怎么填
2014/04/11 职场文书
品牌推广策划方案
2014/05/28 职场文书
雷锋式好少年事迹材料
2014/08/17 职场文书
怎么用Python识别手势数字
2021/06/07 Python
十大公认最好看的动漫:《咒术回战》在榜,《钢之炼金术师》第一
2022/03/18 日漫