zoukankan      html  css  js  c++  java
  • JS:两个数不使用四则运算得出和

    // 原理:
    // 因为按位异或的逻辑很像加法,例如1^0=1,0^0=0
    // 唯一不同的是1^1=0,也就是说无法进位
    // 于是我们把加法拆成 (全不进位得到的数)+(进位数)
    // 假设我们算10+9(1010和1001),可以拆成 (0010^0001)+(10000)
    // 前者只用按位异或,后者用按位与,再左移一位(模拟进位)
    // 因此我们可以得到 a+b = (a^b) + ((a&b)<<1)
    // 换一个方式理解,a和b均可拆成 2的指数次方的数 ,我们先把两者共有的数提取出来*2
    // 再加上各自独有的数
    
    // 由于加法不能用,要靠迭代进行
    // 当其中一方(进位)为0时,退出迭代
    
    function sum(a,b){
        if(a==0) return b
        if(b==0) return a
        let sumA = a^b;
        let sumB = (a&b)<<1;
        console.log(a.toString(2),b.toString(2),sumA.toString(2),sumB.toString(2),);
        return sum(sumA,sumB)
    }
    
    // 测试
    var summ = sum(9,10);
  • 相关阅读:
    shared_ptr weak_ptr boost 内存管理
    _vimrc win7 gvim
    qt 拖放
    数学小魔术 斐波那契数列
    qt4 程序 移植到 qt5
    (转)字符串匹配算法总结
    c++11
    BM 字符串匹配
    编译qt5 demo
    c++ 类库 学习资源
  • 原文地址:https://www.cnblogs.com/chri330dj/p/12536724.html
Copyright © 2011-2022 走看看