问题描述

实现‘字符串加法’,即将两个以字符串形式表示的数字相加,得到结果然后返回一个新的字符串。

例如:输入‘123’,‘321’,返回‘444’。

这样在进行两个任意大的整数相加的时候,既不会溢出,也不会损失精度。

解决方案

1 我的解决方案

function sumStrings(a,b) {
var result = [], count = 0; if(a.length < b.length) b=[a, a=b][0];
b=Array(a.length-b.length+1).join('0')+b; var arrA = a.split('');
var arrB = b.split('');
for(var j=0; j<a.length; j++) {
var temp = (Number(arrA.pop()) + Number(arrB.pop())) +count;
temp>=10?[temp,count]=[temp-10,1]:count=0;
result.push(temp);
}
result.push(count); return result.reverse().join('').replace(/^0+/,'');
}

实现分两步:

1 为输入中较小的一个数前端补0,使得两个数一样长。在那之前为了确定给哪个数补0首先进行了一次比较。

2 将两个数的最后一位依次pop出,进行相加,并存储到result数组中。如果相加的结果大于10,取个位数部分,并使得进位符号count+1。简单来说就像小学时学加法那样,按部就班就对了。

最后得到result数组,还不是我们要的结果,我们需要对它反转,然后转换成字符串,还有去除最前面的0.

2 其他人的解决方案

function sumStrings(a,b){
var res='', c=0;
a = a.split('');
b = b.split('');
while (a.length || b.length || c){
c += ~~a.pop() + ~~b.pop();
res = c % 10 + res;
c = c>9;
}
return res.replace(/^0+/,'');
}

一看之下简洁了不止一点点……
改进的地方在于:

1. 没有上面提到的第一步,不用补0,不用判断哪个数大,如此一来清楚了不少。

2. 没有使用count变量代表进位,直接将相加结果和进位变量记录在了一个变量c里,

3. 使用 ~~a 而不是Number(a)来进行格式转换。

最新文章

  1. svn检出项目
  2. js正则表达式
  3. SSH实例(5)
  4. 【USACO 2.1】Hamming Codes
  5. 基于jython操作hbase
  6. css 清除浮动(转)
  7. photoshop基础
  8. DrawerLayout和toolbar的使用
  9. JavaScript 阻止事件冒泡的实现方法
  10. 模块SEO优化中{分类名称}分隔符去掉及只调用下级分类方法
  11. 自动工作负载库(Automatic Workload Repository,AWR)
  12. 求n^k的前缀和
  13. C# MVC 自学笔记—2 MVC Movie简介
  14. HDU 5775 Bubble Sort
  15. Linux下将Mysql和Apache加入到系统服务里的方法
  16. JavaWeb之Listener监听器
  17. Zookeeper 笔记-角色
  18. SVN冲突解决
  19. [BlueZ] 2、使用bluetoothctl搜索、连接、配对、读写、使能notify蓝牙低功耗设备
  20. Linux下redis的安装及配置

热门文章

  1. ConcurrentHashMap内存泄漏问题
  2. 调用altera IP核的仿真流程—上
  3. C语言学习 第九次作业总结
  4. jQuery之核心API
  5. NC 销售订单
  6. celery 框架
  7. java语言 打印素数实例
  8. Django知识点整理
  9. JUC学习笔记--Thread多线程基础
  10. C#微信公众平台接入示例代码