每日一练30——Java蚱蜢求和(8kyu)

题目

写一个程序,返回从第一个数到num这个数的总和。该些数字将始终是一个大于0的正整数。

例如:

summation(2) -> 3
1 + 2

summation(8) -> 36
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8

测试用例:

import java.util.Random;
import static org.junit.Assert.assertEquals;
import org.junit.Test;

public class GrassHopperTest {
    @Test
    public void test1() {
        assertEquals(1,
        GrassHopper.summation(1));
    }
    @Test
    public void test2() {
        assertEquals(36,
        GrassHopper.summation(8));
    }
}

解题

我的:

public class GrassHopper {

    public static int summation(int n) {
        int sum = 0;
        for(int i = 0; i < n + 1; i++) {
            sum += i;
        }
        return sum;
    }
}

别人的:

1、我又忘记算法公式这种方法了。

public class GrassHopper {

    public static int summation(int n) {

        return  n*(n+1)/2;
    }
}

2、stream大法

import java.util.stream.IntStream;

public class GrassHopper {

    public static int summation(int n) {

        return IntStream.rangeClosed(1,n).sum();
    }
}

3、递归法,之前也有想到该方法

public class GrassHopper {

    public static int summation(int n) {
        if (n == 1)
          return 1;
        return summation(n-1) + n;
    }
}

4、公式法变种,位运算比/运算快

public class GrassHopper {

    public static int summation(int n) {
      return (n * (n+1)) >> 1;
    }
}

思考

小题目也可以有多解答。

你可能感兴趣的:(每日一练30——Java蚱蜢求和(8kyu))