Discuz教程网

JavaScript 大数据相加的问题

[复制链接]
authicon dly 发表于 2011-9-14 08:28:13 | 显示全部楼层 |阅读模式
同样是一道面试题,来自有道前端的面试。
写一个函数处理大数据的相加问题,所谓的大数据是指超出了整型,长整型之类的常规数据类型表示范围的数据。实现语言不限。
我是用js实现的,说一下我自己的思路:
1、首先这个题目最重要的环节在考虑怎么存储大数据?用什么数据类型保存呢?最简单可行的方式是String
2、确定了使用何种类型保存数据之后这个题目就明朗了。首先判断两个传入字符串的长度,取最短的len循环,两者从低位开始对应位相加,同时注意保存进位。在短的数据处理完后,将进位交给较长串的剩余部分处理。
详细实现看一下代码,完整实例见jsfiddle
  1. var strAdd = function(srcA, srcB) {
  2. var i, temp, tempA, tempB, len, lenA, lenB, carry = 0;
  3. var res = [],
  4. arrA = [],
  5. arrB = [],
  6. cloneArr = [];
  7. arrA = srcA.split('');
  8. arrB = srcB.split('');
  9. arrA.reverse();
  10. arrB.reverse();
  11. lenA = arrA.length;
  12. lenB = arrB.length;
  13. len = lenA > lenB ? lenB : lenA;
  14. for (i = 0; i < len; i++) {
  15. tempA = parseInt(arrA[i], 10);
  16. tempB = parseInt(arrB[i], 10);
  17. temp = tempA + tempB + carry;
  18. if (temp > 9) {
  19. res.push(temp - 10);
  20. carry = 1;
  21. } else {
  22. res.push(temp);
  23. carry = 0;
  24. }
  25. }
  26. cloneArr = lenA > lenB ? arrA : arrB;
  27. for (; i < cloneArr.length; i++) {
  28. tempA = parseInt(cloneArr[i], 10);
  29. temp = tempA + carry;
  30. if (temp > 9) {
  31. res.push(temp - 10);
  32. carry = 1;
  33. } else {
  34. res.push(temp);
  35. carry = 0;
  36. }
  37. }
  38. return (res.reverse()).join('');
  39. };
复制代码

以上。
PS:其实吧,这个面试题被我改编了下,原始的面试题主考官提示了用字符串保存大数据的,这个其实降低难度了~~



上一篇:JavaScript中去掉数组中的重复值的实现方法
下一篇:JS 控制小数位数的实现代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2025-5-2 06:50

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表