剑指 Offer 64. 求1+2+…+n
题目描述
求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
解题思路
- 从题解里学到了一种拆位乘法的技巧,如果两数相乘超过了最大范围,可以用拆位乘法,对每次运算结果进行取模运算
知识点
位运算,数学
代码
class Solution {
public:
int quickMulti(int A, int B) {
int ans = 0;
for ( ; B; B >>= 1) {
if (B & 1) {
ans += A;
}
A <<= 1;
}
return ans;
}
int sumNums(int n) {
return quickMulti(n, n + 1) >> 1;
}
};