使用移位计算加法与不使用循环条件判断语句等差求和(剑指offer题目)

1.不使用乘法,条件比较语句计算等差数列和

    //递归的思想
    public static int total(int n){
        int sum = n ;
        //短路性质
        boolean b = (n != 0) && ((sum = sum + total(n - 1)) > 0);
        return sum;
    }

2.使用移位做加法

1.相加,但是不计算进位,这样的话异或运算满足这个性质
2.然后计算计算进位,右移 一位产生进位
3.然后神奇地发现1,2相加就是原来的值,可是不能用加法啊我去
4.所以继续重复上诉的运算法则,直到进位值为0的时候,直接就是xx + 0了,这个就是结果

public static int add(int a , int b){
        int sum = 0;
        int bit = 0;
        do{
            sum = a ^ b;
            bit = (a & b) << 1;
            a = sum;
            b = bit;
        }while(bit != 0);
        
        return sum;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容