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 相关文章推荐
IE浏览器兼容Firefox的JS脚本的代码
Oct 23 Javascript
javascript简单事件处理和with用法介绍
Sep 16 Javascript
jqGrid增加时--判断开始日期与结束日期(实例解析)
Nov 08 Javascript
jQuery过滤选择器:not()方法使用介绍
Apr 20 Javascript
使用jquery.qrcode生成彩色二维码实例
Aug 08 Javascript
Dropzone.js实现文件拖拽上传功能(附源码下载)
Nov 22 Javascript
js微信支付实现代码
Dec 22 Javascript
JavaScript 完成注册页面表单校验的实例
Aug 19 Javascript
原生javascript实现的全屏滚动功能示例
Sep 19 Javascript
Javasript设计模式之链式调用详解
Apr 26 Javascript
原生JS实现相邻月份日历
Oct 13 Javascript
vant 时间选择器--开始时间和结束时间实例
Nov 04 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的变量总结 新手推荐
2011/04/18 PHP
浅析php设计模式之数据对象映射模式
2016/03/03 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
2017/03/02 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
PHP类的自动加载与命名空间用法实例分析
2020/06/05 PHP
封装好的省市地区联动控件附下载
2007/08/13 Javascript
js 中 document.createEvent的用法
2010/08/29 Javascript
JQEasy-ui在IE9以下版本中二次加载的问题分析及处理方法
2014/06/23 Javascript
scrollWidth,clientWidth,offsetWidth的区别
2015/01/13 Javascript
JQuery控制Radio选中方法分析
2015/05/29 Javascript
node.js从数据库获取数据
2016/05/08 Javascript
bootstrap提示标签、提示框实现代码
2016/12/28 Javascript
Vue-router 类似Vuex实现组件化开发的示例
2017/09/15 Javascript
Vue-cli 使用json server在本地模拟请求数据的示例代码
2017/11/02 Javascript
Node.js 使用jade模板引擎的示例
2018/05/11 Javascript
详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
2020/07/21 Javascript
Vue实现input宽度随文字长度自适应操作
2020/07/29 Javascript
如何检测JavaScript中的死循环示例详解
2020/08/30 Javascript
Javascript节流函数throttle和防抖函数debounce
2020/12/03 Javascript
python实现查找两个字符串中相同字符并输出的方法
2015/07/11 Python
Python爬虫代理IP池实现方法
2017/01/05 Python
python读取csv文件并把文件放入一个list中的实例讲解
2018/04/27 Python
python如何生成网页验证码
2018/07/28 Python
python3中pip3安装出错,找不到SSL的解决方式
2019/12/12 Python
简单了解Python write writelines区别
2020/02/27 Python
numpy矩阵数值太多不能全部显示的解决
2020/05/14 Python
python 元组和列表的区别
2020/12/30 Python
CSS3中的opacity属性使用教程
2015/08/19 HTML / CSS
巴西Mr. Cat在线商店:购买包包和鞋子
2019/09/08 全球购物
金融学专科生自我鉴定
2014/02/21 职场文书
行政管理专业求职信
2014/07/06 职场文书
幼儿园感恩节活动方案
2014/10/06 职场文书
师范生见习报告
2014/10/31 职场文书
专家推荐信范文
2015/03/26 职场文书
学校党支部公开承诺书
2015/04/30 职场文书
vue cli4中mockjs在dev环境和build环境的配置详情
2022/04/06 Vue.js