方法一
public static int sum(int num) {
if(num < 0) {
throw new IllegalArgumentException("num must be positive number.");
}
int s = (num * (num + 1)) / 2; //算出0+1+2+...+1000的和,就是(上底+下底)*高/2;类似于求梯形面积那样求
int a = 0;
while(a <= num) {
s -= a;
a += 7; //把是7的倍数(0,7,14,21...)减去,最后剩下的就是不是7的倍数的和了
}
return s;
}
先通过数学公式计算 1 到 num 的和,公式如下:
然后再减去 7、14、21 等 7 的倍数直到 7 的倍数值大于 num 为止
方法二
public static int sum(int num) {
if (num < 0) {
throw new IllegalArgumentException("num must be positive number.");
}
return (num * (num + 1)) / 2 - 7 * (num / 7 * (num / 7 + 1)) / 2;
}
}
其中
结果为