第二周打卡

这周文坚老师给我们传授了一些课程学习目标,如下:
1.知道怎么用一个东西。
2.知道这个东西的原理是什么。
3.基于这个原理,在自己的环境下应该怎么做选择。
4.选择过后,知道怎样成本最低。

这节课主要学习了测试。
以assert和should.js为例,比较了TDD 和 BDD 两种模式的区别。assert更适合开发者,而TDD模式则更通俗。

有一道大数相加的题目,很有意思,在此分享~
javascript能表示的最大数值是Number.MAX_VALUE,即1.7976931348623157e+308,这个数值虽然能够正确表示出来,但是存在一个精度丢失的问题。


JavaScript Number

最常见的一种大数相加解决方案,就是将数字拆成一个个字符串,reverse后想加,flag保存进位值,最后reverse回来。要注意最后一位进位。
第二种方法巧妙得运用了位运算。代码如下:

function AddWithoutArithmetic(num1, num2) {
    if (num2 == 0) {
        return num1;
    }
    var sum = num1 ^ num2;
    var carry = (num1 & num2) << 1;
    return AddWithoutArithmetic(sum, carry);
}

原理:第一步不考虑进位,对每一位相加。0加0与1加1的结果都0,0加1与1加0的结果都是1。我们可以注意到,这和异或的结果是一样的。对异或而言,0和0、1和1异或的结果是0,而0和1、1和0的异或结果是1。接着考虑第二步进位,对0加0、0加1、1加0而言,都不会产生进位,只有1加1时,会向前产生一个进位。此时我们可以想象成是两个数先做位与运算,然后再向左移动一位。只有两个数都是1的时候,位与得到的结果是1,其余都是0。第三步把前两个步骤的结果相加。如果我们定义一个函数AddWithoutArithmetic,第三步就相当于输入前两步骤的结果来递归调用自己。

Reference

travis-ci官网
js实现大数相加
面试题:位操作实现四则运算

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • # PPT 365 打卡活动 —— 每天一页 PPT ,不限主题,做了就好。每张图都会附上简要说明和制作方法,有不...
    听行长的话阅读 1,207评论 4 8
  • 刚刚开始学彩铅,看到笔就像开始动,这不看到这个戴眼镜的小狗狗,忍不住痒痒,结果却是辣么“辣”眼睛。 差得十万八千里...
    婧旭儿阅读 126评论 0 0
  • 在一个storyBoard里面拖一个UIButton进去,然后新建一个自定义UIBUtton类
    LeeLeCoder阅读 273评论 0 0
  • 关于自己的梦想我想很多人都答不出,最近我在想关于我的梦想却发现答案不止一个,那么究竟哪个才是我的梦想。 我希望你不...
    淤潭阅读 278评论 0 0
  • 前几天,和同事聊起最近在看综艺节目,其中一个同事非常坦诚地说,我最近这段时间,已经看不进长达一两个小时的综艺节目了...
    红妹爱折腾阅读 361评论 0 1

友情链接更多精彩内容