请设计一个机械累加器,计算从 1、2… 一直累加到目标数值 target 的总和。注意这是一个只能进行加法操作的程序,不具备乘除、if-else、switch-case、for 循环、while 循环,及条件判断语句等高级功能。

示例 1:

输入: target = 5
输出: 15

示例 2:

输入: target = 7
输出: 28

提示:

1 <= target <= 10000

不能使用乘除、if-else、switch-case、for、while、条件判断

排除这些后只能想到位运算,这就想到了用位运算代替乘法然后用求和公式,需要手动展开乘数二进制

另一种方法,因为禁止了循环语句,所以想要遍历只有递归了,但是条件判断语句也被禁止

递归无法返回,这时我们需要一种手段在target=1时能结束递归

这时想到&&的短路效应,只要&&前的值为0就不会执行后面内容

1
2
3
4
5
6
7
class Solution {
public:
int mechanicalAccumulator(int target) {
target > 1 && (target += mechanicalAccumulator(target - 1));
return target;
}
};