求1+2+3+...+n

Posted by DH on July 21, 2017

题目

求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

分析

不能使用乘除也还好,可以用加减,效果一样的。但是不能使用循环和判断就比较蛋疼了。

要解决这个题必须要使用判断语句,不然根本不知道从哪里跳出,位移运算,也找不到规律,在运算符中,还能做判断的也就是”或” 还有 &&

这两个运算符都可以短路,”或” 前半段为真,就短路

&& 前半段为假短路。

而本题中是从1-n,这是我们的区间,只要判断当前的数是不是在这个区间,并且用+或者-,进行移位。

综上,代码如下;

代码

public class Solution {
    public int Sum_Solution(int n) {
        int sum = n;
        boolean valid = (n>0)&&((sum+= Sum_Solution(n - 1) )>0);
        return sum;
    }
}